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"]