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

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

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

Обсуждение
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 результаты этих функций рассматриваются как строки, а не как значения времени.
Теги:
дата, время
Добавлено: 22 Июля 2018 21:30:42 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...