按时间范围查询,你一定纠结过开始时间和结束时间要不要格式化为00:00:00
和23:59:59
,也一定纠结过数据库的时间是按照什么类型比较的,between and
可以用吗?反正我是纠结过。
数据库时间比较是按照什么类型去比较?
你一定见过按时间查询的SQL
,时间参数用''
修饰,那我们可以理解为数据库时间表面上是按字符串类型(字典顺序)去比较的,实战中我们也是这样用的,但实际上数据库时间是按照时间戳比较的(数据库源码中应该可以找到,反正我没看过源码)。我们不需要知道它按什么类型比较,只需要知道SQL
用字符串就可以实现时间范围查询。
between and
可以用于时间范围查询吗?
当然可以,但是对于不同类型的时间,应该使用相应的数据去查询,否则查询可能不是预期的结果集。
对于date
,参数应该是 年月日 格式,例如between '2019-07-18' and '2019-07-18'
对于datetime/timestamp
,参数应该是 年月日时分秒 格式,例如between '2019-07-18 00:00:00' and '2019-07-18 23:59:59'
以年月日格式为例(between '2019-07-18' and '2019-07-18'
),MySQL
查询的数据的范围如下:
类型 | 数据的开始时间 | 数据的结束时间 |
---|---|---|
date | 以 2019-07-18 00:00:00 开始 | 以 2019-07-18 23:59:59 结束 |
datetime | 以 2019-07-18 00:00:00 开始 | 以 2019-07-18 00:00:00 结束 |
timestamp | 以 2019-07-18 00:00:00 开始 | 以 2019-07-18 00:00:00 结束 |
示例
数据如下,均按照年月日的参数格式查询数据
-
date
查询select * from time_test where date_type between '2019-07-16' and '2019-07-18' ORDER BY date_type; select * from time_test where date_type >= '2019-07-16' and date_type <= '2019-07-18' ORDER BY date_type;
-
datetime/timestamp
查询select * from time_test where datetime_type between '2019-07-16' and '2019-07-18' ORDER BY date_type; select * from time_test where datetime_type >= '2019-07-16' and datetime_type <= '2019-07-18' ORDER BY date_type; select * from time_test where timestamp_type between '2019-07-16' and '2019-07-18' ORDER BY date_type; select * from time_test where timestamp_type >= '2019-07-16' and timestamp_type <= '2019-07-18' ORDER BY date_type;