date_trunc
Описание
Усекает значение времени на основе указанной части даты, такой как год, день, час или минута.
Selena также предоставляет функции year, quarter, month, week, day и hour для извлечения указанной части даты.
Синтаксис
DATETIME|DATE date_trunc(VARCHAR fmt, DATETIME|DATE datetime)
Параметры
-
datetime: время для усечения, которое может быть типа DATETIME или DATE. Дата и время должны существовать. В противном случае будет возвращен NULL. Например,2021-02-29 11:12:13не существует как дата и будет возвращен NULL. -
fmt: часть даты, то есть до какой точности будет усеченdatetime. Значение должно быть константой VARCHAR.fmtдолжен быть установлен в значение, указанное в следующей таблице. Если значение неверно, будет возвращена ошибка.Если
datetimeявляется значением DATE,fmtможет быть толькоyear,quarter,month,weekилиday. Если вы установитеfmtв другие единицы даты, напримерhour, будет выдана ошибка. См. Пример 8.
| Значение | Описание |
|---|---|
| microsecond | Усекает до микросекунды (начиная с версии 1.5.0). |
| millisecond | Усекает до миллисекунды (начиная с версии 1.5.0). |
| second | Усекает до секунды. |
| minute | Усекает до минуты. Часть секунд будет обнулена. |
| hour | Усекает до часа. Части минут и секунд будут обнулены. |
| day | Усекает до дня. Временная часть будет обнулена. |
| week | Усекает до первой даты недели, в которую попадает datetime. Временная часть будет обнулена. |
| month | Усекает до первой даты месяца, в который попадает datetime. Временная часть будет обнулена. |
| quarter | Усекает до первой даты квартала, в который попадает datetime. Временная часть будет обнулена. |
| year | Усекает до первой даты года, в который попадает datetime. Временная часть будет обнулена. |
Возвращаемое значение
Возвращает значение типа DATETIME или DATE.
Если datetime имеет тип DATE и fmt установлен в hour, minute или second, временная часть возвращаемого значения по умолчанию равна 00:00:00.
Примеры
Пример 1: Усечение входного времени до микросекунды.
select date_trunc('microsecond', '2023-10-31 23:59:59.001002');
+---------------------------------------------------------+
| date_trunc('microsecond', '2023-10-31 23:59:59.001002') |
+---------------------------------------------------------+
| 2023-10-31 23:59:59.001002 |
+---------------------------------------------------------+
Пример 2: Усечение входного времени до миллисекунды.
select date_trunc('millisecond', '2023-10-31 23:59:59.001002');
+---------------------------------------------------------+
| date_trunc('millisecond', '2023-10-31 23:59:59.001002') |
+---------------------------------------------------------+
| 2023-10-31 23:59:59.001000 |
+---------------------------------------------------------+
select date_trunc('millisecond', '2023-10-31');
+-----------------------------------------+
| date_trunc('millisecond', '2023-10-31') |
+-----------------------------------------+
| 2023-10-31 00:00:00 |
+-----------------------------------------+
Пример 3: Усечение входного времени до минуты.
select date_trunc('minute', '2023-11-04 23:59:59.001002');
+----------------------------------------------------+
| date_trunc('minute', '2023-11-04 23:59:59.001002') |
+----------------------------------------------------+
| 2023-11-04 23:59:00 |
+----------------------------------------------------+
Пример 4: Усечение входного времени до часа.
select date_trunc("hour", "2020-11-04 11:12:13");
+-------------------------------------------+
| date_trunc('hour', '2020-11-04 11:12:13') |
+-------------------------------------------+
| 2020-11-04 11:00:00 |
+-------------------------------------------+
Пример 5: Усечение входного времени до первого дня недели.
select date_trunc("week", "2020-11-04 11:12:13");
+-------------------------------------------+
| date_trunc('week', '2020-11-04 11:12:13') |
+-------------------------------------------+
| 2020-11-02 00:00:00 |
+-------------------------------------------+
Пример 6: Усечение входного времени до первого дня квартала.
select date_trunc("quarter", "2020-11-04 11:12:13");
+----------------------------------------------+
| date_trunc('quarter', '2020-11-04 11:12:13') |
+----------------------------------------------+
| 2020-10-01 00:00:00 |
+----------------------------------------------+
Пример 7: Усечение входного времени до первого дня года.
select date_trunc('year', '2023-11-04 23:59:59.001002');
+--------------------------------------------------+
| date_trunc('year', '2023-11-04 23:59:59.001002') |
+--------------------------------------------------+
| 2023-01-01 00:00:00 |
+--------------------------------------------------+
Пример 8: Усечение значения DATE до часа. Возвращается ошибка.
select date_trunc("hour", cast("2020-11-04" as date));
ERROR 1064 (HY000): Getting analyzing error from line 1, column 26 to line 1, column 51. Detail message: date_trunc function can't support argument other than year|quarter|month|week|day.
Пример 9: Усечение входной даты до первого дня года.
select date_trunc("month", cast("2020-11-04" as date));
+-------------------------------------------------+
| date_trunc('month', CAST('2020-11-04' AS DATE)) |
+-------------------------------------------------+
| 2020-11-01 |
+-------------------------------------------------+