ARRAYS_RANGE
功能
生成数值或日期时间的等差序列数组。
- 对于数值类型,默认差值为 1
- 对于日期时间类型,默认差值为 1 天
语法
ARRAY_RANGE(end)ARRAY_RANGE(start, end)ARRAY_RANGE(start, end, step)ARRAY_RANGE(start_dt, end_dt)ARRAY_RANGE(start_dt, end_dt, interval step unit)
参数
start、end:非负整数。end为上界,结果不包含end本身。step:必须是正整数,步长,默认 1。start_dt、end_dt:DATETIME。两参形式默认步长为 1 DAY。interval step unit:日期时间步长,unit取YEAR|QUARTER|MONTH|WEEK|DAY|HOUR|MINUTE|SECOND,step必须为正整数。
返回值
- 返回
ARRAY<T>;当参数非法时返回NULL;当范围为空时返回空数组[]。 - 数组元素类型
T与输入一致:整型返回INT,日期时间返回DATETIME。
使用说明
- 数值序列:从
start开始,按step递增,直到但不包含end(即左闭右开)。 - 日期时间序列:从
start_dt开始,按给定unit的step递增,直到但不包含end_dt;两参形式等价于interval 1 day。 - 非法参数返回
NULL:- 数值:
start < 0、end < 0、step <= 0。 - 日期时间:
start_dt或end_dt非法,或step <= 0。
- 数值:
ARRAY_RANGE和SEQUENCE函数功能一致。
示例
-
数值:
start默认从0 开始,step默认为 1ARRAY_RANGE(5)->[0, 1, 2, 3, 4]ARRAY_RANGE(0, 5)->[0, 1, 2, 3, 4]
-
数值:
end为上界,不在结果之内。ARRAY_RANGE(2, 6, 2)->[2, 4]ARRAY_RANGE(3, 3)->[]
-
数值:
end必须大于等于start,否则返回[]ARRAY_RANGE(3, 2)->[]
-
数值:
start、end参数必须为非负正数,step必须大于 0。ARRAY_RANGE(-1, 3)->NULLARRAY_RANGE(1, 3, 0)->NULL
-
日期时间:
step默认是 1 day。ARRAY_RANGE('2022-05-15 12:00:00', '2022-05-17 12:00:00')->['2022-05-15 12:00:00', '2022-05-16 12:00:00']ARRAY_RANGE('2022-05-15 12:00:00', '2022-05-17 12:00:00', interval 1 day)->['2022-05-15 12:00:00', '2022-05-16 12:00:00']
-
日期时间:
unit取YEAR|QUARTER|MONTH|WEEK|DAY|HOUR|MINUTE|SECONDARRAY_RANGE('2022-05-15 12:00:00', '2024-05-17 12:00:00', interval 1 year)->["2022-05-15 12:00:00", "2023-05-15 12:00:00"]ARRAY_RANGE('2022-05-15 12:00:00', '2023-05-17 12:00:00', interval 1 quarter);->["2022-05-15 12:00:00", "2022-08-15 12:00:00", "2022-11-15 12:00:00", "2023-02-15 12:00:00"]ARRAY_RANGE('2022-05-15 12:00:00', '2022-07-17 12:00:00', interval 1 month);->["2022-05-15 12:00:00", "2022-06-15 12:00:00"]ARRAY_RANGE('2022-05-15 12:00:00', '2022-05-17 12:00:00', interval 1 day)->['2022-05-15 12:00:00', '2022-05-16 12:00:00']ARRAY_RANGE('2022-05-15 12:00:00', '2022-05-15 14:00:00', interval 1 hour)->["2022-05-15 12:00:00", "2022-05-15 13:00:00"]ARRAY_RANGE('2022-05-15 12:00:00', '2022-05-15 12:02:00', interval 1 minute)->["2022-05-15 12:00:00", "2022-05-15 12:01:00"]ARRAY_RANGE('2022-05-15 12:00:00', '2022-05-15 12:00:02', interval 1 second)->["2022-05-15 12:00:00", "2022-05-15 12:00:01"]