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

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. Конечное значение не включается в результат. Без INTERVAL шаг равен 1 DAY.
<unit>Единица шага для значений даты и времени: YEAR, QUARTER, MONTH, WEEK, DAY, HOUR, MINUTE или SECOND.

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

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

  • Возвращает 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