天天看點

Mysql,Oracle中關于between的邊界,範圍以及查詢日期時注意事項

關于Between操作符

操作符 BETWEEN … AND 會選取介于兩個值之間的資料範圍。這些值可以是數值、文本或者日期。

文法

SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2      

注意事項

對于上訴SQL不同的資料庫對 BETWEEN…AND 操作符的處理方式是有差異的。主要有以下三種情況,

  1. 查詢出"value1" 和 “value2” 之間的資料,但不包括 “value1” 和 “value2”
  2. 某些資料庫會列出介于 “value1” 和 “value2” 之間并包括 “value1” 和 “value2” 的資料(比如MQL,ORACLE)
  3. 而另一些資料庫會列出介于 “value1” 和 “value2” 之間的資料,包括 “value1” ,但不包括 “value2” 。

Oracle和mysql的between的邊界,範圍

對于如下表test1有9條資料

Mysql,Oracle中關于between的邊界,範圍以及查詢日期時注意事項
Mysql,Oracle中關于between的邊界,範圍以及查詢日期時注意事項
Mysql,Oracle中關于between的邊界,範圍以及查詢日期時注意事項

結論

between 的範圍:包含兩邊的邊界值

eg: id between 3 and 7 等價與 id >=3 and id<=7

not between 的範圍:不包含邊界值

eg:id not between 3 and 7 等價與 id < 3 or id>7

Mysql中用between…and…查詢日期時注意事項

select count(1) from user where regist_date between ‘2017-07-25 00:00:00’ and ‘2017-07-25 24:00:00’;

這條sql語句查詢出結果為0。實際上資料庫有一條符合該查詢條件的資料。

錯誤原因:2017-07-25 24:00:00 晚上24點即為下一天00點 2017-07-26 00:00:00,資料庫識别不出24點的資訊;換成下一天00點即可以查詢出正确結果。

Mysql,Oracle中關于between的邊界,範圍以及查詢日期時注意事項
Mysql,Oracle中關于between的邊界,範圍以及查詢日期時注意事項

把between…and…換成>= <=能識别出來