Перейти к основному содержимому

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 |
+-------------------------------------------------+