首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> SQL 基礎

SQL BETWEEN 操作符完整指南:範圍查詢語法、文字/日期應用與跨資料庫差異

     編輯:SQL 基礎

SQL BETWEEN 操作符完整指南


BETWEEN 用於選取「介於兩個值之間」的資料,包含數值、文字、日期。語法簡潔,可替代 column >= value1 AND column <= value2。


基本語法

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
  • value1 為下界,value2 為上界。
  • 預設為「包含邊界」(含等於),但各資料庫實作可能不同,詳見後文。

演示資料庫:RUNOOB 範例資料

Websites 表

+----+--------------+---------------------------+-------+---------+
| id | name         | url                       | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1  | Google       | https://www.google.cm/    | 1     | USA     |
| 2  | 淘寶         | https://www.taobao.com/   | 13    | CN      |
| 3  | 菜鳥教程     | https://www.runoob.com/    | 4689  | CN      |
| 4  | 微博         | https://weibo.com/         | 20    | CN      |
| 5  | Facebook     | https://www.facebook.com/ | 3     | USA     |
| 7  | stackoverflow| https://stackoverflow.com/ | 0     | IND     |
+----+--------------+---------------------------+-------+---------+

access_log 表

+-----+---------+-------+------------+
| aid | site_id | count | date       |
+-----+---------+-------+------------+
| 1   | 1       | 45    | 2016-05-10 |
| 2   | 3       | 100   | 2016-05-13 |
| 3   | 1       | 230   | 2016-05-14 |
| 4   | 2       | 10    | 2016-05-14 |
| 5   | 5       | 205   | 2016-05-14 |
| 6   | 4       | 13    | 2016-05-15 |
| 7   | 3       | 220   | 2016-05-15 |
| 8   | 5       | 545   | 2016-05-16 |
| 9   | 3       | 201   | 2016-05-17 |
+-----+---------+-------+------------+

實戰範例

範例 1:數值範圍 - alexa 1 到 20

SELECT * FROM Websites
WHERE alexa BETWEEN 1 AND 20;

輸出結果:

範例 2:NOT BETWEEN - 排除範圍

SELECT * FROM Websites
WHERE alexa NOT BETWEEN 1 AND 20;

輸出結果:

範例 3:搭配 IN/NOT IN - 複合條件

SELECT * FROM Websites
WHERE (alexa BETWEEN 1 AND 20)
AND NOT country IN ('USA', 'IND');

輸出結果:

範例 4:文字範圍 - name 介於 'A' 到 'H'

SELECT * FROM Websites
WHERE name BETWEEN 'A' AND 'H';

輸出結果:

範例 5:文字 NOT BETWEEN

SELECT * FROM Websites
WHERE name NOT BETWEEN 'A' AND 'H';

輸出結果:

範例 6:日期範圍 - access_log 日期 2016-05-10 到 2016-05-14

SELECT * FROM access_log
WHERE date BETWEEN '2016-05-10' AND '2016-05-14';

輸出結果:


⚠️ 關鍵警告:跨資料庫的邊界包含行為差異

不同資料庫對 BETWEEN 的邊界處理不一致!

資料庫邊界處理
SQL Server、PostgreSQL、Oracle包含兩邊邊界(value1 <= col <= value2)
MySQL包含兩邊邊界
部分舊版/特定設定可能只包含下界、不包上界,或兩邊都不包

最佳實務:生產環境務必實測目標資料庫行為,或改用明確的 column >= value1 AND column <= value2 避免歧義。


進階提示

  • 文字比較依照資料庫的 排序規則,大小寫敏感度視 Collation 而定。
  • 日期時間型別若含時間元件,BETWEEN '2024-01-01' AND '2024-01-31' 可能漏掉 1/31 當天非 00:00:00 的資料,建議用 date >= '2024-01-01' AND date < '2024-02-01'。
  • BETWEEN 可用於 JOIN ON 條件,但較少見。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved