Обработка даты и времени как чисел

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

Решение
Преобразуйте строку в число.

Обсуждение
MySQL часто разрешает обрабатывать значения даты и времени как числа. Это может быть удобно для выполнения арифметических операций со значениями. Чтобы вызвать преобразование значения времени в число, добавьте к нему ноль или используйте его в числовом контексте:

mysql> SELECT t1,
-> t1+0 AS 't1 as number',
-> FLOOR(t1) AS 't1 as number',
-> FLOOR(t1/10000) AS 'hour part'
-> FROM time_val;

+-----------+----------------+----------------+------------+
| t1 | t1 as number | t1 as number | hour part |
+-----------+----------------+----------------+------------+
| 15:00:00 | 150000 | 150000 | 15 |
| 05:01:30 | 50130 | 50130 | 5 |
| 12:30:20 | 123020 | 123020 | 12 |
+-----------+----------------+----------------+------------+

Такое же преобразование можно выполнить и для даты или значения дата-и-время:

mysql> SELECT d, d+0 FROM date_val;

+--------------+-------------+
| d | d+0 |
+--------------+-------------+
| 1864-02-28 | 18640228 |
| 1900-01-15 | 19000115 |
| 1987-03-05 | 19870305 |
| 1999-12-31 | 19991231 |
| 2000-06-04 | 20000604 |
+--------------+-------------+

mysql> SELECT dt, dt+0 FROM datetime_val;

+--------------------------+---------------------+
| dt | dt+0 |
+--------------------------+---------------------+
| 1970-01-01 00:00:00 | 19700101000000 |
| 1987-03-05 12:30:15 | 19870305123015 |
| 1999-12-31 09:00:00 | 19991231090000 |
| 2000-06-04 15:45:30 | 20000604154530 |
+--------------------------+---------------------+

Значение, порожденное добавлением нуля, – это не то же самое, что значение, полученное в результате преобразования в базовые единицы, такие как секунды или дни.


При добавлении ноля вы по сути удаляете разделители из строкового представления исходного значения. Кроме того, преобразование в число возможно только для значений, которые MySQL воспринимает как значения времени. Если вы попытаетесь преобразовать в число литерную строку, добавляя к ней 0, то получите только первую часть значения:

mysql> SELECT '1999-01-01'+0, '1999-01-01 12:30:45'+0, '12:30:45'+0;

+-------------------+------------------------------+----------------+
| '1999-01-01'+0 | '1999-01-01 12:30:45'+0 | '12:30:45'+0 |
+-------------------+------------------------------+----------------+
| 1999 | 1999 | 12 |
+-------------------+------------------------------+----------------+

То же самое случится и при использовании функций DATE_FORMAT() и TIME_FORMAT(), при извлечении частей значений DATETIME или TIMESTAMP посредством функций LEFT() или RIGHT(). В контексте прибавления 0 результаты этих функций рассматриваются как строки, а не как значения времени..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
Выбор записей по временным характеристикам
Вывод значений TIMESTAMP в удобном для чтения виде
Вычисление возраста
Вычисление длины месяца
Вычисление интервалов между значениями времени

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