Разбиение дат и времени на части с помощью функций форматирования

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

Решение
Используйте функцию форматирования, такую как DATE_FORMAT() или TIME_ FORMAT(), со строкой форматирования, содержащей спецификатор для той части значения, которую вы хотите получить.

Обсуждение
MySQL предоставляет ряд возможностей для разбиения значений дат и времени на составляющие. Функции DATE_FORMAT() и TIME_FORMAT() обеспечивают один из способов извлечения отдельных частей значений времени:

mysql> SELECT dt,
-> DATE_FORMAT(dt,'%Y') AS year,
-> DATE_FORMAT(dt,'%d') AS day,
-> TIME_FORMAT(dt,'%H') AS hour,
-> TIME_FORMAT(dt,'%s') AS second
-> FROM datetime_val;

+---------------------+------+------+------+--------+
| dt | year | day | hour | second |
+---------------------+------+------+------+--------+
| 1970-01-01 00:00:00 | 1970 | 01 | 00 | 00 |
| 1987-03-05 12:30:15 | 1987 | 05 | 12 | 15 |
| 1999-12-31 09:00:00 | 1999 | 31 | 09 | 00 |
| 2000-06-04 15:45:30 | 2000 | 04 | 15 | 30 |
+---------------------+------+------+------+--------+

Функции форматирования позволяют извлекать не только одну составляющую значения, но и несколько.


Например, чтобы получить всю дату или время из значений DATETIME, выполните такое предложение:

mysql> SELECT dt,
-> DATE_FORMAT(dt,'%Y-%m-%d') AS 'date part',
-> TIME_FORMAT(dt,'%T') AS 'time part'
-> FROM datetime_val;

+---------------------+------------+-----------+
| dt | date part | time part |
+---------------------+------------+-----------+
| 1970-01-01 00:00:00 | 1970-01-01 | 00:00:00 |
| 1987-03-05 12:30:15 | 1987-03-05 | 12:30:15 |
| 1999-12-31 09:00:00 | 1999-12-31 | 09:00:00 |
| 2000-06-04 15:45:30 | 2000-06-04 | 15:45:30 |
+---------------------+------------+-----------+

Преимуществом использования форматирующих функций является то, что вы можете отобразить извлеченные значения не в том виде, в котором они были представлены в исходных значениях. Если вы хотите представить дату в формате, отличном от CCYY-MM-DD, или, например, время – без секунд, это легко сделать:

mysql> SELECT ts,
-> DATE_FORMAT(ts,'%M %e, %Y') AS 'descriptive date',
-> TIME_FORMAT(ts,'%H:%i') AS 'hours/minutes'
-> FROM timestamp_val;

+----------------+-------------------+---------------+
| ts | descriptive date | hours/minutes |
+----------------+-------------------+---------------+
| 19700101000000 | January 1, 1970 | 00:00 |
| 19870305123015 | March 5, 1987 | 12:30 |
| 19991231090000 | December 31, 1999 | 09:00 |
| 20000604154530 | June 4, 2000 | 15:45 |
+----------------+-------------------+---------------+.



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

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

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