在使用date()
而没有使用时,我注意到了一种奇怪的行为:
当我使用
时SELECT * FROM `mytable` WHERE date(date_add) >= '2017-08-01' and date(date_add) <= '2017-08-31'
我得到了给定日期范围内的所有日期记录,但如果这样做:
SELECT * FROM `mytable` WHERE date_add >= '2017-08-01' and date_add <= '2017-08-31'
我没有从最后一天获得31行,为什么? (date_add字段是日期时间类型)
修改
我应该如何正确编码日期范围?因为到目前为止我所理解的是,如果我不使用YYYY-MM-DD HH-MM-SS
这样的全职时间,我应该始终与DATE()
进行比较,以避免错过最后一天的结果。
答案 0 :(得分:0)
那是因为date_add
是DATETIME
字段。如果日期2017-08-31
的时间类似于表格中的08:15:00
或13:21:00
,则您的日期会比2017-08-31 00:00:00
“更大”。您的比较只会返回时间为2017-08-31
的{{1}}的数据。
答案 1 :(得分:0)
因为没有date()
转换,您的比较意味着值'2017-08-01 00:00:00' and '2017-08-01 00:00:00'