Добрый день. Есть база 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
Как такое может быть?