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 :
[для достижения наилучших результатов при использовании BETWEEN со значениями даты или времени] используйте CAST() для явного преобразования значений в нужный тип данных. Примеры: Если вы сравните дату на два дня значения, преобразование значения даты в формате datetime. Если вы используете строковую константу, такую как '2001-1-1' в сравнении с датой, приведите строку к дате.
I предположим, что лучше использовать STR_TO_DATE, так как они потратили время, чтобы сделать функцию только для этого, а также тот факт, что я нашел это в промежутке между doc...