Вопрос

Например, следующий запрос работает нормально:

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...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top