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

ARRAY_RANGE

Описание​

Создаёт массив чисел или значений даты и времени, образующих арифметическую последовательность. Результат включает начальное значение и не включает конечное. Возвращает NULL, если любой из аргументов равен NULL.

В серии Doris 4.1 начиная с версии 4.1.5 последовательности значений даты и времени сохраняют все допустимые значения, меньшие конечного, даже если между последним значением и конечным остаётся меньше полного интервала. В более ранних версиях эти значения в конце последовательности могли пропускаться.

Синтаксис​

ARRAY_RANGE(<end>)
ARRAY_RANGE(<start>, <end> [, <step>])
ARRAY_RANGE(<start_dt>, <end_dt> [, INTERVAL <step> <unit>])

Параметры​

ПараметрОписание
<start>Необязательное неотрицательное начальное значение типа INT. По умолчанию: 0.
<end>Неотрицательное конечное значение типа INT, не включаемое в результат.
<step>Необязательный шаг, заданный положительным целым числом. По умолчанию: 1.
<start_dt>, <end_dt>Начальное и конечное значения типа DATETIME или TIMESTAMP_NS. Оба аргумента должны иметь одинаковый тип. Конечное значение не включается в результат. Без INTERVAL шаг составляет 1 DAY.
<unit>Единица шага для значений даты и времени: YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE или SECOND.

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

Возвращает ARRAY. Числовые последовательности содержат элементы типа INT; последовательности значений даты и времени содержат элементы входного типа DATETIME или TIMESTAMP_NS.

  • Возвращает NULL, если любой из аргументов равен NULL или недопустим, например если числовое начальное или конечное значение отрицательно либо шаг неположителен.
  • Возвращает пустой массив [], если начальное значение больше или равно конечному.
  • Каждое следующее значение вычисляется на основе предыдущего. При операциях с месяцами дата может быть скорректирована до последнего дня целевого месяца.
  • Выдаёт ошибку, если последовательность превышает предельный размер массива. Если следующее значение выходит за диапазон типа даты, генерация останавливается после последнего допустимого значения.
  • SEQUENCE является псевдонимом ARRAY_RANGE.

Пример​

Числовые последовательности не включают конечное значение:

SELECT ARRAY_RANGE(5), ARRAY_RANGE(2, 6, 2), ARRAY_RANGE(3, 2);
[0, 1, 2, 3, 4]    [2, 4]    []

Последовательности значений даты и времени по умолчанию используют шаг в один день. Последнее значение сохраняется, даже если до конечного значения остаётся меньше одного дня:

SELECT ARRAY_RANGE(
CAST('2024-01-01 00:00:00.000000' AS DATETIME(6)),
CAST('2024-01-02 12:00:00.000000' AS DATETIME(6)));
["2024-01-01 00:00:00.000000", "2024-01-02 00:00:00.000000"]

При шаге в один месяц следующее значение вычисляется прибавлением месяца к ранее сгенерированной дате:

SELECT ARRAY_RANGE(
CAST('2020-01-31 00:00:00' AS DATETIME(6)),
CAST('2020-03-30 00:00:00' AS DATETIME(6)), INTERVAL 1 MONTH);
["2020-01-31 00:00:00.000000", "2020-02-29 00:00:00.000000", "2020-03-29 00:00:00.000000"]

Для SEQUENCE действуют те же правила:

SELECT SEQUENCE(
CAST('2024-01-01 00:00:00.000000' AS DATETIME(6)),
CAST('2024-01-01 00:00:01.500000' AS DATETIME(6)), INTERVAL 1 SECOND);
["2024-01-01 00:00:00.000000", "2024-01-01 00:00:01.000000"]

Аргументы со значением NULL или недопустимые аргументы:

SELECT ARRAY_RANGE(NULL), ARRAY_RANGE(-1, 3), ARRAY_RANGE(1, 3, 0);
NULL    NULL    NULL

При входных значениях типа TIMESTAMP_NS сохраняется наносекундная точность:

SELECT ARRAY_RANGE(
CAST('2022-05-15 12:00:00.123456789' AS TIMESTAMP_NS),
CAST('2022-05-15 12:00:02.123456789' AS TIMESTAMP_NS), INTERVAL 1 SECOND);
["2022-05-15 12:00:00.123456789", "2022-05-15 12:00:01.123456789"]