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

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

Ответы [ 3 ]

7 голосов
/ 15 декабря 2009
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')
2 голосов
/ 15 декабря 2009

STR_TO_DATE функция - ref

Пример:

select str_to_date('10-oct-2006', "%d-%b-%Y"); 
0 голосов
/ 15 декабря 2009

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

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.

...