MySQL根据日期查询数据不对:【关于MySQL查询日期区间的隐藏问题】

时间:2024-04-01 13:25:12

问题描述:

假设一个表中有如下数据:

MySQL根据日期查询数据不对:【关于MySQL查询日期区间的隐藏问题】

查询2018-08-17到2018-08-19的数据,正确答案显而易见是5条

但如果使用下面两个sql语句,你会看到不同的结果:

第一种:SELECT * from date_test WHERE test_date >= '2018-08-17' AND test_date <= '2018-08-19'

MySQL根据日期查询数据不对:【关于MySQL查询日期区间的隐藏问题】

第二种:SELECT * from date_test WHERE test_date >= '2018-08-17 00:00:00' AND test_date <= '2018-08-19 23:59:59'

MySQL根据日期查询数据不对:【关于MySQL查询日期区间的隐藏问题】

发现了吧,当查询时间精确到时分秒的时候,“<=”后面的日期的数据就能够显示出来了

原因:

MySQL根据日期查询数据不对:【关于MySQL查询日期区间的隐藏问题】

如上图所示,因为在Mysql中,datetime格式是精确到时分秒的,如果没有填写,默认为“00:00:00”,这个在表中id=1和id=2的数据中就可以看出来(我在插入数据的时候,故意没有删除了具体时间,点击提交之后,自动补充为了00:00:00)

所以,第一种方法相当于查看了17号00:00:00到19号00:00:00的数据