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

QUARTER_FLOOR

Описание​

Округляет значение типа DATE, DATETIME, TIMESTAMP_NS или TIMESTAMPTZ вниз до ближайшей границы заданного периода в кварталах. Если указано начало отсчёта, период рассчитывается относительно него.

Синтаксис​

QUARTER_FLOOR(<datetime>)
QUARTER_FLOOR(<datetime>, <origin>)
QUARTER_FLOOR(<datetime>, <period>)
QUARTER_FLOOR(<datetime>, <period>, <origin>)

Параметры​

ПараметрОписание
<datetime>Значение для округления вниз. Поддерживаются DATE, DATETIME, TIMESTAMP_NS и TIMESTAMPTZ.
<period>Длительность периода в кварталах. Значение типа INT, задающее число кварталов в каждом периоде.
<origin>Начало отсчёта периода. Поддерживаются DATE, DATETIME, TIMESTAMP_NS и TIMESTAMPTZ; значение по умолчанию — 0001-01-01 00:00:00.

Примечания:

  • Если параметр period не указан, используется период длительностью 1 квартал
  • Если параметр period не является положительным целым числом, функция возвращает NULL
  • Округление всегда выполняется в сторону прошлого
  • Временная часть возвращаемого значения всегда равна 00:00:00

Возвращаемое значение​

Для входного значения типа TIMESTAMP_NS возвращается значение типа TIMESTAMP_NS с фиксированной точностью до девяти знаков в дробной части секунды. Результаты проверяются на соответствие диапазону возвращаемого типа; для TIMESTAMP_NS используется диапазон [1677-09-21 00:12:43.145224192, 2262-04-11 23:47:16.854775807].

Если <origin> не указан для входного значения типа TIMESTAMP_NS, описанное в документации начало отсчёта по умолчанию используется только как внутренняя точка отсчёта для выравнивания периодов; оно не обязано входить в диапазон значений, допустимых для хранения в TIMESTAMP_NS.

Если <datetime> имеет тип DATE, возвращаемый тип — DATE. Если <datetime> имеет тип DATETIME, возвращаемый тип — DATETIME. Если <datetime> имеет тип TIMESTAMP_NS, возвращаемый тип — TIMESTAMP_NS с девятью знаками в дробной части секунды. Если <datetime> имеет тип TIMESTAMPTZ, возвращаемый тип — TIMESTAMPTZ. Временная часть результата устанавливается в 00:00:00.

Примеры​

При отсчёте от '0001-01-01 00:00:00' для периодов длительностью 5 кварталов и 4 квартала возвращается начало периода, ближайшее к входной дате.

SELECT QUARTER_FLOOR("2023-07-13 22:28:18", 5), QUARTER_FLOOR("2023-07-13 22:28:18", 4);
+-----------------------------------------+-----------------------------------------+
| QUARTER_FLOOR("2023-07-13 22:28:18", 5) | QUARTER_FLOOR("2023-07-13 22:28:18", 4) |
+-----------------------------------------+-----------------------------------------+
| 2021-01-01 00:00:00 | 2022-01-01 00:00:00 |
+-----------------------------------------+-----------------------------------------+

При отсчёте от '2022-01-01 00:00:00' для периодов длительностью 2 и 4 квартала возвращается начало периода, ближайшее к входной дате.

SELECT QUARTER_FLOOR("2023-03-13 22:28:18", 2, "2022-01-01 00:00:00"), QUARTER_FLOOR("2023-07-13 22:28:18", 4, "2022-01-01 00:00:00");
+----------------------------------------------------------------+----------------------------------------------------------------+
| QUARTER_FLOOR("2023-03-13 22:28:18", 2, "2022-01-01 00:00:00") | QUARTER_FLOOR("2023-07-13 22:28:18", 4, "2022-01-01 00:00:00") |
+----------------------------------------------------------------+----------------------------------------------------------------+
| 2023-01-01 00:00:00 | 2022-01-01 00:00:00 |
+----------------------------------------------------------------+----------------------------------------------------------------+

Рекомендации​

См. также date_floor