MySQL Использование строкового столбца с текстом даты в качестве поля даты

Я делаю миграцию базы данных, и в настоящее время у меня есть строковый столбец с датами (вместо того, чтобы установить для них оптимальное поле даты и времени). Есть ли функция, которую я могу вызвать в MySQL, чтобы преобразовать это поле в дату и время, чтобы я мог использовать функции даты, такие как до этой даты или после этой даты?

3 ответа

Решение
SELECT  *
FROM    mytable
WHERE   CAST(mydatefield AS DATETIME) >= CAST('2009-01-01' AS DATETIME)

Если ваши даты в каком-то странном формате, MySQL не понимает, пользуйся STR_TO_DATE:

SELECT  *
FROM    mytable
WHERE   STR_TO_DATE(mydatefield, '%Y, %d %m') >= STR_TO_DATE('2009, 01 01', '%Y, %d %m')

STR_TO_DATE функция - ссылка

Пример:

select str_to_date('10-oct-2006', "%d-%b-%Y"); 

Вы всегда можете преобразовать дату в отметку времени при извлечении ее из таблицы:

SELECT *
FROM my_table
WHERE UNIX_TIMESTAMP(my_time) > UNIX_TIMESTAMP("2000-10-18 12:30:40");

Если вызывается без аргумента, возвращает метку времени Unix (секунды с UTC 1970-01-01 00:00:00) в виде целого числа без знака. Если UNIX_TIMESTAMP() вызывается с аргументом даты, он возвращает значение аргумента в секундах с UTC 1970-01-01 00:00:00. date может быть строкой DATE, строкой DATETIME, TIMESTAMP или числом в формате YYMMDD или YYYYMMDD. Сервер интерпретирует дату как значение в текущем часовом поясе и преобразует ее во внутреннее значение в UTC. Клиенты могут установить свой часовой пояс, как описано в Разделе 9.7, "Поддержка часового пояса MySQL Server".

Для получения дополнительной информации ознакомьтесь с документацией для UNIX_TIMESTAMP на веб-сайте MySQL.

Другие вопросы по тегам