我有一个查询选择日期之间的行。
SELECT * FROM `table` WHERE statusDate >= '2014-10-01' AND statusDate <= '2014-10-31'
当我使用上面的查询时,它返回的行少于以下查询......
SELECT * FROM `table` WHERE statusDate > '2014-09-30' AND statusDate < '2014-11-01'
从技术上讲,我认为它会返回相同的结果,但事实并非如此。
我对底层查询的理解是它从所述日期之上和之下的日期中选择,不包括。为什么结果会有所不同?
答案 0 :(得分:0)
如果statusDate
是DATETIME
列,则时间将导致该月最后一天的行的结果不同。当您将日期2014-10-31
转换为DATETIME
时,它会2014-10-31 00:00:00
。如果statusDate
为2014-10-31 09:23:11
的行,则第一个查询不会选择该行,但第二个查询会选择该行。
您可以使用以下方法解决此问题:
WHERE statusDate >= '2014-10-01' AND DATE(statusDate) <= '2014-10-31'
或者您可以将时间添加到WHER
子句:
WHERE statusDate >= '2014-10-01' AND statusDate <= '2014-10-31 23:59:59'