天天看点

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…换成>= <=能识别出来