に最終更新
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"]