mysql datetime сравнение


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

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

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

3 55

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 :

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

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