MySQL Запрос не возвращает записи текущего дня - PullRequest
0 голосов
/ 20 апреля 2020

Следующий запрос не возвращает записи на дату окончания (20 апреля). Я где-то читал, что это потому, что время не учитывается с датой, переданной в запросе. Но после исследования различных решений я не могу понять, что это MySQL.

select * from listings
where created_date >= '2020-04-18' 
and created_date <= '2020-04-20'

create_date - поле даты и времени.

Обратите внимание, я не могу использовать "между «в этой ситуации.

Ответы [ 2 ]

3 голосов
/ 20 апреля 2020

Поскольку created_date является DATETIME, у него будет часть времени, которая, вероятно, не равна нулю. Когда вы сравниваете его с датой без временной части, временная часть этой даты устанавливается равной 0, и поэтому тест не пройден. Желательно, чтобы вы использовали:

 created_date < '2020-04-21'

, или вы можете включить часть времени, но это замедлит сравнение:

 created_date <= '2020-04-20 23:59:59'

или, альтернативно, возьмите часть DATE и сравните это , но у этого есть недостаток предотвращения использования индекса на created_date:

DATE(created_date) <= '2020-04-20'

Демонстрация на SQLFiddle

0 голосов
/ 20 апреля 2020

Лучшая логика c:

where created_date >= '2020-04-18' and
      created_date < '2020-04-21'

Или, если вы предпочитаете:

where created_date >= '2020-04-18' and
      created_date < date('2020-04-20') + interval 1 day

Они безопасны для индекса и оптимизатора, потому что на колонка. Они также работают независимо от того, есть или нет компонент времени.

...