日期比较细节
当数据库进行日期比较的时候,比较的不是当天的天数,而是时间戳。
如果不写明的数据:
- 如果是年那么就是1900
- 如果是月那就是01
- 如果是日那就是01
- 如果是时分秒那就是00
- 如果毫秒数不存在,那就是000
举例来说:
select * from t1 where time < "2022-02-02"
他就相当于
select * from t1 where time < "2022-02-02 00:00:00 000"
如果比较日期的话,必然是一个左开右闭的空间。
大于和大于等于
这个问题是这样的:
time < "2020-12-12" and time > "2020-12-13"
这个时间是整整24小时整 - 1毫秒。
time <= "2020-12-12" and time > "2020-12-13"
这个时间是24小时整
time <= "2020-12-12" and time >= "2020-12-13"
这个时间也是24小时整 + 1毫秒。
因为毫秒数的存在,导致不管是大于等于、小于等于都是左开右闭的24小时。
而很多人就以为大于等于就是改变了左开右闭的策略,导致计算日期差了一天。
修改
如果需要修改开闭区间,只能这样写:
time <= "2020-12-12 00:00:00" and time >= "2020-12-13 23:59:59"