摘要:在本教學中,您將學習如何使用 SQL 的 BETWEEN
運算子來檢查值是否落在特定的範圍內。
SQL BETWEEN 運算子簡介
BETWEEN
運算子是 SQL 中的邏輯運算子之一。 BETWEEN
運算子會檢查值是否在值的範圍內。
BETWEEN
運算子的語法如下:
expression BETWEEN low AND high;
Code language: SQL (Structured Query Language) (sql)
如果 expression
大於或等於 (>=
) 低值,且小於或等於 (<=
) 高值,則 BETWEEN
運算子會傳回 true。
技術上,BETWEEN
等同於以下使用大於或等於 (>=
) 和小於或等於 (<=
) 運算子的表達式:
expression >= low AND expression <= high
Code language: SQL (Structured Query Language) (sql)
若要將值與排除範圍進行比較,您需要使用小於 (<
) 和大於 (>
) 的比較運算子。
NOT BETWEEN
若要否定 BETWEEN
運算子的結果,您可以使用 NOT
運算子:
expression NOT BETWEEN low AND high
Code language: SQL (Structured Query Language) (sql)
如果表達式小於 low
或大於 (>) high
,則 NOT BETWEEN
傳回 true;否則,它會傳回 false。
與 BETWEEN
運算子類似,您可以使用小於 (<) 和大於 (>) 運算子以及 OR
運算子來重寫 NOT BETWEEN
運算子,如下所示:
expression < low OR expression > high
Code language: SQL (Structured Query Language) (sql)
在實務上,您經常在 WHERE
子句中使用 BETWEEN
和 NOT BETWEEN
運算子搭配 SELECT
,以選擇某個欄位的值在特定範圍內的資料列。
SQL BETWEEN 運算子範例
我們將使用範例資料庫中的 employees
表格來說明 BETWEEN
運算子的運作方式。

1) 使用 SQL BETWEEN 運算子與數字的範例
以下陳述式使用 BETWEEN
運算子來找出所有薪資介於 2,500 和 2,900 之間的員工:
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary BETWEEN 2500 AND 2900
ORDER BY
salary DESC;
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-------------+---------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-------------+---------+
| 116 | Shelli | Baida | 2900.00 |
| 117 | Sigal | Tobias | 2800.00 |
| 126 | Irene | Mikkilineni | 2700.00 |
| 118 | Guy | Himuro | 2600.00 |
| 119 | Karen | Colmenares | 2500.00 |
+-------------+------------+-------------+---------+
請注意,結果集中包含薪資為 2,500 和 2,900 的員工。
以下查詢會傳回與上述查詢相同的結果集。但是,它使用的是大於或等於 (>=) 和小於或等於 (<=) 的比較運算子:
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary >= 2500 AND salary <= 2900
ORDER BY
salary;
Code language: SQL (Structured Query Language) (sql)
2) 使用 SQL NOT BETWEEN 的範例
以下範例使用 NOT BETWEEN
運算子來找出所有薪資不在 2,500 和 2,900 範圍內的員工:
SELECT
employee_id,
first_name,
last_name,
salary
FROM
employees
WHERE
salary NOT BETWEEN 2500 AND 2900
ORDER BY salary DESC;
Code language: SQL (Structured Query Language) (sql)
+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | salary |
+-------------+-------------+------------+----------+
| 100 | Steven | King | 24000.00 |
| 101 | Neena | Kochhar | 17000.00 |
| 102 | Lex | De Haan | 17000.00 |
| 145 | John | Russell | 14000.00 |
| 146 | Karen | Partners | 13500.00 |
| 201 | Michael | Hartstein | 13000.00 |
| 205 | Shelley | Higgins | 12000.00 |
| 108 | Nancy | Greenberg | 12000.00 |
| 114 | Den | Raphaely | 11000.00 |
| 204 | Hermann | Baer | 10000.00 |
| 109 | Daniel | Faviet | 9000.00 |
| 103 | Alexander | Hunold | 9000.00 |
| 176 | Jonathon | Taylor | 8600.00 |
| 177 | Jack | Livingston | 8400.00 |
| 206 | William | Gietz | 8300.00 |
| 121 | Adam | Fripp | 8200.00 |
| 110 | John | Chen | 8200.00 |
| 120 | Matthew | Weiss | 8000.00 |
| 122 | Payam | Kaufling | 7900.00 |
| 112 | Jose Manuel | Urman | 7800.00 |
| 111 | Ismael | Sciarra | 7700.00 |
| 178 | Kimberely | Grant | 7000.00 |
| 113 | Luis | Popp | 6900.00 |
| 123 | Shanta | Vollman | 6500.00 |
| 203 | Susan | Mavris | 6500.00 |
| 179 | Charles | Johnson | 6200.00 |
| 202 | Pat | Fay | 6000.00 |
| 104 | Bruce | Ernst | 6000.00 |
| 106 | Valli | Pataballa | 4800.00 |
| 105 | David | Austin | 4800.00 |
| 200 | Jennifer | Whalen | 4400.00 |
| 107 | Diana | Lorentz | 4200.00 |
| 192 | Sarah | Bell | 4000.00 |
| 193 | Britney | Everett | 3900.00 |
| 115 | Alexander | Khoo | 3100.00 |
+-------------+-------------+------------+----------+
3) 使用 SQL BETWEEN 運算子搭配日期範圍
以下範例使用 BETWEEN
運算子來找出所有在 1999 年 1 月 1 日
和 2000 年 12 月 31 日
之間加入公司的員工:
SELECT
employee_id,
first_name,
last_name,
hire_date
FROM
employees
WHERE
hire_date BETWEEN '1999-01-01' AND '2000-12-31'
ORDER BY
hire_date;
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+------------+------------+
| employee_id | first_name | last_name | hire_date |
+-------------+------------+------------+------------+
| 107 | Diana | Lorentz | 1999-02-07 |
| 178 | Kimberely | Grant | 1999-05-24 |
| 119 | Karen | Colmenares | 1999-08-10 |
| 113 | Luis | Popp | 1999-12-07 |
| 179 | Charles | Johnson | 2000-01-04 |
+-------------+------------+------------+------------+
以下範例使用 NOT BETWEEN
運算子來找出所有不在 1989 年 1 月 1 日
到 1999 年 12 月 31 日
之間加入公司的員工:
SELECT
employee_id,
first_name,
last_name,
hire_date
FROM
employees
WHERE
hire_date NOT BETWEEN '1989-01-01' AND '1992-12-31'
ORDER BY
hire_date;
Code language: SQL (Structured Query Language) (sql)
+-------------+------------+-----------+------------+
| employee_id | first_name | last_name | hire_date |
+-------------+------------+-----------+------------+
| 100 | Steven | King | 1987-06-17 |
| 200 | Jennifer | Whalen | 1987-09-17 |
| 179 | Charles | Johnson | 2000-01-04 |
+-------------+------------+-----------+------------+
3 rows in set (0.00 sec)
Code language: JavaScript (javascript)
4) 使用 SQL BETWEEN 運算子搭配函式的範例
以下範例使用 BETWEEN 運算子搭配 YEAR 函式,找出在 1990 年到 1993 年之間加入公司的員工:
SELECT
employee_id,
first_name,
last_name,
year(hire_date) joined_year
FROM
employees
WHERE
year(hire_date) BETWEEN 1990 and 1993
ORDER BY
hire_date;
輸出
+-------------+------------+-----------+-------------+
| employee_id | first_name | last_name | joined_year |
+-------------+------------+-----------+-------------+
| 103 | Alexander | Hunold | 1990 |
| 104 | Bruce | Ernst | 1991 |
| 102 | Lex | De Haan | 1993 |
+-------------+------------+-----------+-------------+
在此範例中:
- 首先,
YEAR()
函式會從聘用日期傳回年份。 - 其次,
BETWEEN
運算子會使用YEAR()
函式的結果,並檢查其是否在 1990 年到 1993 年的範圍內。
如果您的資料庫不支援 YEAR()
函式,您需要使用類似的函式:
資料庫 | 從日期中擷取年份的函式: |
---|---|
PostgreSQL | DATE_PART('year', hire_date) |
Oracle | EXTRACT(year from hire_date) |
SQL Server | YEAR(hire_date) |
摘要
- 如果值在特定範圍內,則 BETWEEN 運算子會傳回 true。
- 使用 NOT 運算子來否定 BETWEEN 運算子。