Задать вопрос
flapflapjack
@flapflapjack
на треть я прав

Как сравнить даты в MySQL?

Совсем уже позабыл что и как. Нужна ваша помощь, товарищи.

У меня на входе есть диапазон дат начала звонков:
start = 26.05.2020
end = 27.05.2020

в БД в таблице CDR есть поле start в формате datetmie

я делаю так:
SELECT * FROM crd WHERE start BETWEEN STR_TO_DATE(:start, '%d.%m.%Y') AND STR_TO_DATE(:end, '%d.%m.%Y')


но вылетает пустой результат.
Посмотрел логи, а там MySQL делает вот что:
SELECT STR_TO_DATE('26.05.2020', '%d.%m.%Y');
Выдает 26.05.2020

а

SELECT start FROM crd;
Выдает 2020-05-26 23:50:22

Потому не идет отбор?

Как мне вообще корректно и чтобы не на индусском коде проверить, входит ли значение поля `start` с типом DATETIME в диапазон дат формата 26.05.2020 и 27.05.2020. С использованием between наверное?

Как вариант я думал написать говнокод, который на PHP преобразует первоначальную дату диапазона из 26.05.2020 в "2020-05-26 00:00:00" а конечную дату в "2020-05-27 23:59:59" а потом сравнивать, но помоему это какая-то дичь.
  • Вопрос задан
  • 736 просмотров
Подписаться 1 Простой Комментировать
Решение пользователя Rsa97 К ответам на вопрос (2)
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для корректного сравнения все даты должны быть в формате YYYY-MM-DD.

Даты сравниваются как строки, так что при записи BETWEEN '26.05.2020' AND '27.05.2020' в этот диапазон попадут и '26.06.1800', и '27.04.5100'.
Ответ написан