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

Задача
У вас есть части даты или времени, и вы хотите объединить их для получения значения даты или времени.

Решение
Соедините части, используя функцию CONCAT().

Обсуждение
В качестве еще одного способа конструирования значений времени можно предложить использование функций извлечения частей дат в сочетании с CONCAT(). Но этот метод не столь удачен и иногда выводит несколько отличающиеся результаты:

mysql> SELECT d,
-> CONCAT(YEAR(d),'-',MONTH(d),'-01')
-> FROM date_val;

+------------+------------------------------------+
| d | CONCAT(YEAR(d),'-',MONTH(d),'-01') |
+------------+------------------------------------+
| 1864-02-28 | 1864-2-01 |
| 1900-01-15 | 1900-1-01 |
| 1987-03-05 | 1987-3-01 |
| 1999-12-31 | 1999-12-01 |
| 2000-06-04 | 2000-6-01 |
+------------+------------------------------------+

Обратите внимание на то, что значения месяцев в некоторых датах состоят из одной цифры. Чтобы обеспечить двузначность значений, требуемую форматом ISO, используйте LPAD() при необходимости добавления к значению начального нуля:

mysql> SELECT d,
-> CONCAT(YEAR(d),'-',LPAD(MONTH(d),2,'0'),'-01')
-> FROM date_val;
+------------+------------------------------------------------+
| d | CONCAT(YEAR(d),'-',LPAD(MONTH(d),2,'0'),'-01') |
+------------+------------------------------------------------+
| 1864-02-28 | 1864-02-01 |
| 1900-01-15 | 1900-01-01 |
| 1987-03-05 | 1987-03-01 |
| 1999-12-31 | 1999-12-01 |
| 2000-06-04 | 2000-06-01 |
+------------+------------------------------------------------+


Значения TIME могут формироваться из значений часов, минут, секунд при помощи тех же методов, которые используются для создания значений DATE.


Например, для того чтобы изменить значение TIME так, чтобы часть секунд стала равна 00, извлеките части минут и часов, а затем воссоедините их при помощи функций TIME_FORMAT() и CONCAT():

mysql> SELECT t1,
-> TIME_FORMAT(t1,'%H:%i:00') AS method1,
-> CONCAT(LPAD(HOUR(t1),2,'0'),':',LPAD(MINUTE(t1),2,'0'),':00') AS method2
-> FROM time_val;

+----------+----------+----------+
| t1 | method1 | method2 |
+----------+----------+----------+
| 15:00:00 | 15:00:00 | 15:00:00 |
| 05:01:30 | 05:01:00 | 05:01:00 |
| 12:30:20 | 12:30:00 | 12:30:00 |
+----------+----------+----------+

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

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

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