сравнение 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...