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" а потом сравнивать, но помоему это какая-то дичь.
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Для корректного сравнения все даты должны быть в формате YYYY-MM-DD.

Даты сравниваются как строки, так что при записи BETWEEN '26.05.2020' AND '27.05.2020' в этот диапазон попадут и '26.06.1800', и '27.04.5100'.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
ThunderCat
@ThunderCat
{PHP, MySql, HTML, JS, CSS} developer
Как вариант я думал написать говнокод, который на PHP преобразует первоначальную дату диапазона из 26.05.2020 в "2020-05-26 00:00:00" а конечную дату в "2020-05-27 23:59:59" а потом сравнивать, но помоему это какая-то дичь.
То есть по вашему преобразовывать ВСЕ строки таблицы для сравнения в формат НЕ ПОДДЕРЖИВАЕМЫЙ интерфейсом бд это ок, а 2 значения привести в стандарт - не комильфо...

Обратите внимание на ответ Rsa97, Даты сравниваются как строки, по этому и сравнение идет именно в таком формате, от года к дате. Ваше преобразование делает строки вывернутыми по смыслу, то есть сортировка идет по дате дня, год "как бы вообще не учитывается".
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы