Перейти к основному содержимому
Версия: 2.0.x

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Усекает до микросекунды (с версии 3.1.7).
millisecondУсекает до миллисекунды (с версии 3.1.7).
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 |
+-------------------------------------------------+