сравнение даты и времени mysql
-
10-10-2019 - |
Вопрос
Например, следующий запрос работает нормально:
SELECT *
FROM quotes
WHERE expires_at <= '2010-10-15 10:00:00';
Но это, очевидно, выполняет сравнение 'string' - мне было интересно, есть ли встроенная в MySQL функция, которая специально выполняет сравнение 'datetime'.
Решение
... это, очевидно, выполняет сравнение «строки»
Нет - если формат даты/времени соответствует поддерживаемому формату, MySQL выполняет неявное преобразование для преобразования значения в DateTime, на основе столбца, с которым он сравнивается. То же самое происходит с:
WHERE int_column = '1'
... где строковое значение «1» преобразуется в целое число, потому что int_column
Тип данных - это int, а не char/varchar/text.
Если вы хотите явно преобразовать строку в DateTime, Функция str_to_date был бы лучшим выбором:
WHERE expires_at <= STR_TO_DATE('2010-10-15 10:00:00', '%Y-%m-%d %H:%i:%s')
Другие советы
Но это, очевидно, выполняет сравнение «строки»
Нет.
Видеть 11.2. Преобразование типа в оценке экспрессии.
Когда оператор используется с операндами разных типов, происходит преобразование типа, чтобы сделать операнды совместимыми. Некоторые преобразования происходят неявно. Например, MySQL автоматически преобразует числа в строки по мере необходимости, и наоборот.
Я знаю, что он довольно старый, но я просто столкнулся с проблемой, и вот что я видел в документе SQL :
[Для достижения наилучших результатов при использовании BETWEEN со значениями даты или времени] используйте CAST() для явного преобразования значений в нужный тип данных.Примеры:Если вы сравниваете дату-ВРЕМЯ с двумя значениями ДАТЫ, преобразуйте значения ДАТЫ в значения DATETIME.Если вы используете строковую константу, такую как '2001-1-1', для сравнения с ДАТОЙ, приведите строку к ДАТЕ.
Я предполагаю, что лучше использовать STR_TO_DATE, поскольку они потратили время на создание функции только для этого, а также тот факт, что я нашел это в документе BETWEEN...