ELEMENT_AT
功能描述
ELEMENT_AT
ELEMENT_AT
函数用于从数组或映射(Map)中提取指定位置或键的元素。它支持两种用法:从数组中按索引提取元素,以及从映射中按键提取值。
语法
从数组中提取元素
ELEMENT_AT(arrayExpr, index)
从映射中提取值
ELEMENT_AT(mapExpr, key)
参数
array
array
:一个数组表达式,表示需要从中提取元素的数组。
index
index
:一个整数表达式,表示数组中元素的索引位置。索引从 1 开始,支持负数(从数组末尾向前计数)。
map
map
:一个映射表达式,表示需要从中提取值的映射。
key
key
:一个与映射键类型匹配的表达式,用于指定需要提取的键。
返回值
- 从数组中提取元素:
- 返回值类型与数组元素的类型一致。
- 如果
abs(index)
abs(index)
超出数组长度范围,将引发错误(除非使用 TRY_ELEMENT_AT
TRY_ELEMENT_AT
函数)。
index = 0
index = 0
不合法,也会引发 CZLH-22003
CZLH-22003
。
- 如果
index
index
为负数,则从数组末尾向前计数。
- 从映射中提取值:
- 如果键存在于映射中,返回对应的值;否则返回
NULL
NULL
。
示例
示例 1:从数组中提取元素
SELECT ELEMENT_AT(ARRAY[1, 2, 3], 2);
+--------------------------+
| ELEMENT_AT([1, 2, 3], 2) |
+--------------------------+
| 2 |
+--------------------------+
示例 2:使用负索引从数组中提取元素
SELECT ELEMENT_AT(ARRAY[1, 2, 3], -1);
+---------------------------+
| ELEMENT_AT([1, 2, 3], -1) |
+---------------------------+
| 3 |
+---------------------------+
越界和 0 下标
SELECT ELEMENT_AT(ARRAY(10,20,30), 0);
-- CZLH-22003: index 0 is out of bounds
SELECT ELEMENT_AT(ARRAY(10,20,30), 99);
-- CZLH-22003: index 99 is out of bounds
需要越界返回
NULL
NULL
而不中断查询时,使用
TRY_ELEMENT_AT
TRY_ELEMENT_AT
。方括号访问(例如
arr[0]
arr[0]
)是另一套由
cz.sql.array.subscript.one.based
cz.sql.array.subscript.one.based
控制的下标规则。