資料表結構:name、startnum、endnum(endnum > startnum,BIGINT)。需查詢給定數值(如 250)落在哪筆資料的區間內。
SELECT name
FROM range_table
WHERE startnum <= 250 AND endnum >= 250;
資料範例:
| name | startnum | endnum |
|---|---|---|
| 張三 | 101 | 200 |
| 李四 | 201 | 300 |
| 王五 | 301 | 400 |
查詢 250 → 符合 201 <= 250 <= 300 → 回傳「李四」。
<= / >=:區間包含端點(閉區間)< / >:區間不包含端點(開區間)startnum <= val AND endnum > valCREATE INDEX idx_range ON range_table(startnum, endnum);
查詢條件 startnum <= ? AND endnum >= ? 可使用複合索引(視資料庫優化器而定)。
-- Java JDBC 範例
String sql = "SELECT name FROM range_table WHERE startnum <= ? AND endnum >= ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setLong(1, value);
ps.setLong(2, value);
若區間可能重疊,需決定回傳策略:
LIMIT 1 / TOP 1ORDER BY priority DESC| 資料庫 | 限制筆數語法 |
|---|---|
| MySQL / PostgreSQL / SQLite | LIMIT 1 |
| SQL Server | TOP 1 |
| Oracle | FETCH FIRST 1 ROW ONLY (12c+) 或 ROWNUM = 1 |