сравнение MySQL с типом datetime

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

SELECT * 
  FROM quotes 
 WHERE expires_at <= '2010-10-15 10:00:00';

но это, очевидно, выполняет сравнение "string" - мне было интересно, есть ли функция, встроенная в MySQL, которая специально делает сравнения "datetime".

3 ответов


...это, очевидно, выполняет сравнение "string"

нет-если формат даты/времени соответствует поддерживаемому формату, 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')

но это, очевидно, выполняет сравнение "string"

нет. Строка будет автоматически преобразована в значение DATETIME.

посмотреть 11.2. Преобразование типов в оценке выражений.

когда оператор используется с операндами разных типов, происходит преобразование типа, чтобы сделать операнды совместимыми. Некоторые преобразования происходят неявно. Например, MySQL автоматически преобразует числа в строки как необходимо, и наоборот.


Я знаю его довольно старый, но я просто сталкиваюсь с проблемой, и есть то, что я видел в SQL doc :

[для достижения наилучших результатов при использовании между значениями даты или времени] используйте CAST() для явного преобразования значений в нужный тип данных. Примеры: если вы сравниваете DATETIME с двумя значениями DATE, преобразуйте значения DATE в значения DATETIME. Если вы используете строковую константу, такую как "2001-1-1", в сравнении с датой, приведите строку к дате.

I предположим, что лучше использовать STR_TO_DATE, так как они потратили время, чтобы сделать функцию только для этого, а также тот факт, что я нашел это между doc...