问题描述
在 Mysql 中使用 between and
根据时间来查询时不包含右边界数据,例如
SELECT * FROM log_info WHERE add_time BETWEEN '2020-08-04' and '2020-08-09'
查询出来的数据并不会包含 2020-08-09
的数据,因为 Mysql 对日期的查询是默认 00:00:00
,所以上面的时间实际是:2020-08-04 00:00:00
至 2020-08-09 00:00:00
,2020-08-09
当天的数据不在区间内,所以查询不到。
解决方法
- 将右边界日期往后推一天,如
2020-08-04
-2020-08-10
; - 将右边界时间精确到秒,如
2020-08-04
-2020-08-09 23:59:59
;
以上问题只会在字段类型为 datetime
中出现,Mysql 本身是包含边界的,但如果字段类型为 datetime
时,数据将会被转换为 2020-08-04 00:00:00
,而数据类型为 date
则不会出现上述问题。