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

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

Решение
Соедините части, используя функцию 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 |
+----------+----------+----------+
Теги:
дата, время
Добавлено: 22 Июля 2018 19:56:32 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...