Newto
@Newto

Как такое может быть. Разный результат при «меньше либо равно» и «BETWEEN» для одной даты?

Добрый день. Есть база MySQL, есть запрос, в части которого стоит такое:
AND `info`.`created` <= STR_TO_DATE('2021-04-14 23:59:59', '%Y-%m-%d %H:%i:%s')


Где `info`.`created` имеет тип DATETIME. При выдаче появляется результат, в котором строк со значением `info`.`created`=2021-04-14 XX:XX:XX появляется 10 штук. Ну и остальные строки с более ранними датами, они нас не интересуют в контексте данного вопроса. В чем, собственно, вопрос: если я поменяю запрос на

AND `info`.`created` BETWEEN STR_TO_DATE('2021-04-14 00:00:00', '%Y-%m-%d %H:%i:%s') AND STR_TO_DATE('2021-04-14 23:59:59', '%Y-%m-%d %H:%i:%s')

Т.е. запрошу все строки с датой 2021-04-14, то строк где `info`.`created`=2021-04-14 XX:XX:XX будет уже не 10, а 13.

Может кто подсказать как такое вообще возможно?

UPD: Суть вопроса не в том, что может некорректно работать BETWEEN. Суть вопроса в том, почему запрос где выводятся данные созданные в любую дату до 2021-04-14 и в саму дату 2021-04-14 выводит меньше подходящих строк, чем запрос где выводятся строки созданные конкретно в дату 2021-04-14. Опишу проще:

AND DATE_FORMAT(`info`.`created`, '%Y-%d-%m') <= '2021-04-14' -- выводит 10 строк где `info`.`created` = 2021-04-14

AND DATE_FORMAT(`info`.`created`, '%Y-%d-%m') = '2021-04-14' -- выводит 13 строк где `info`.`created` = 2021-04-14


Как такое может быть?
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 1
@cicatrix
было бы большой ошибкой думать
Вот ссылка:
https://www.techonthenet.com/mysql/between.php
Где написано
When using the MySQL BETWEEN Condition with dates, be sure to use the CAST function to explicitly convert the values to dates.

Точно не могу сказать, в чём разница между
STR_TO_DATE('2021-04-14 23:59:59', '%Y-%m-%d %H:%i:%s')
и
CAST('2014-02-01' AS DATE)
но, возможно, она есть.

Кроме того, возможно, играет роль не даты, а времени.
2021-04-14 < 2021-04-14 11:46:23
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы