У меня есть запрос выбора строк между датами.
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'
Технически я бы подумал, что это даст те же результаты, но это не так.
Насколько я понимаю, нижний запрос состоит в том, что он выбирает даты выше и ниже указанных дат, не включая. Почему результаты будут другими?
Если 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'
Других решений пока нет …