MySQL / 5. Работа с датами и временем

Обработка в MySQL строк как значений времени

Задача
Вы хотите, чтобы строка интерпретировалась как значение времени.

Решение
Используйте строку в контексте времени, чтобы дать MySQL понять, как вы бы хотели ее интерпретировать.

Обсуждение
Если вам нужно заставить MySQL интерпретировать строку как дату или время, используйте ее в выражении, которое, не изменяя значения, создает временной контекст. Например, вы не можете добавить ноль к строковому литералу TIME, инициируя преобразование времени в число, но если использовать функции TIME_TO_SEC() и SEC_TO_TIME(), то такая возможность появится:

mysql> SELECT SEC_TO_TIME(TIME_TO_SEC('12:30:45'))+0;

+------------------------------------------------------+
| SEC_TO_TIME(TIME_TO_SEC('12:30:45'))+0 |
+------------------------------------------------------+
|                                      123045                        |
+------------------------------------------------------+

Преобразование значения в секунды и обратно не изменяет его, но заставляет MySQL воспринимать результат как значение типа TIME. Для значений дат делаем то же самое, только используем функции TO_DAYS() и FROM_DAYS():

mysql> SELECT '1999-01-01'+0, FROM_DAYS(TO_DAYS('1999-01-01'))+0;

+----------------+----------------------------------------------------+
| '1999-01-01'+0 | FROM_DAYS(TO_DAYS('1999-01-01'))+0 |
+----------------+----------------------------------------------------+
|       1999        |                                19990101                       |
+----------------+----------------------------------------------------+

Для интерпретации строк форматов DATETIME и TIMESTAMP можно прибегнуть к помощи функции DATE_ADD():

mysql> SELECT
-> DATE_ADD('1999-01-01 12:30:45',INTERVAL 0 DAY)+0 AS 'numeric datetime',
-> DATE_ADD('19990101123045',INTERVAL 0 DAY)+0 AS 'numeric timestamp';

+---------------------+----------------------+
| numeric datetime | numeric timestamp |
+---------------------+----------------------+
| 19990101123045 | 19990101123045 |
+---------------------+----------------------+

Статьи по MySQL на эту тему:

Выбор записей по временным характеристикам
Вывод значений TIMESTAMP в удобном для чтения виде
Вычисления со значениями TIMESTAMP Задача
Использование значений TIMESTAMP
Регистрация времени последнего изменения строки

Вернуться в раздел: MySQL / 5. Работа с датами и временем