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