ELEMENT_AT
功能
ELEMENT_AT
函数用于从数组或 map 中按指定的索引或键提取对应的元素值。
- 当作用于 数组(ARRAY) 时,返回指定位置的元素;
- 当作用于 MAP 时,返回指定键对应的值。
- 当作用于 VARIANT 时,返回指定子列对应的值。
语法
ELEMENT_AT(container, key_or_index)
参数
container
:可以是ARRAY
,MAP
,VARIANT
。key_or_index
:- 对于
ARRAY
:为整数类型,索引从 1 开始; - 对于
MAP
:为MAP
中的键类型(K
),可为任意支持的基础类型。 - 对于
VARIANT
: 为字符串类型
- 对于
返回值
- 若为
ARRAY
,返回数组中对应索引的元素(T
类型); - 若为
MAP
,返回对应键的值(V
类型); - 若为
VARIANT
, 返回VARIANT
类型; - 如果索引或键不存在,返回
NULL
; - 如果参数为
NULL
,返回NULL
。
使用说明
- 数组索引从 1 开始,不是从 0 开始;
- 支持负数索引,
-1
表示最后一个元素,-2
表示倒数第二个,以此类推; ELEMENT_AT(container, key_or_index)
函数的功能与container[key_or_index]
作用一致(详细见示例)。
示例
-
ELEMENT_AT
函数的功能与[]
作用一致。SELECT ELEMENT_AT([1, 2, 3], 2);
+--------------------------+
| ELEMENT_AT([1, 2, 3], 2) |
+--------------------------+
| 2 |
+--------------------------+
SELECT [1, 2, 3][2];
+--------------+
| [1, 2, 3][2] |
+--------------+
| 2 |
+--------------+ -
数组下标从 1 开始,越界会返回
NULL
。SELECT ELEMENT_AT([1, 2, 3], 0);
+--------------------------+
| ELEMENT_AT([1, 2, 3], 0) |
+--------------------------+
| NULL |
+--------------------------+
SELECT ELEMENT_AT([1, 2, 3], 4);
+--------------------------+
| ELEMENT_AT([1, 2, 3], 4) |
+--------------------------+
| NULL |
+--------------------------+ -
访问
MAP
中不存在的 KEY,会返回NULL
。SELECT ELEMENT_AT({"a": 1, "b": 2}, "c");
+-----------------------------------+
| ELEMENT_AT({"a": 1, "b": 2}, "c") |
+-----------------------------------+
| NULL |
+-----------------------------------+ -
访问
VARIANT
的某个子列,如果VARIANT
的值不是 OBJECT,返回空SELECT ELEMENT_AT(CAST('{"a": 1, "b": 2}' AS VARIANT), "a");
+------------------------------------------------------+
| ELEMENT_AT(CAST('{"a": 1, "b": 2}' AS VARIANT), "a") |
+------------------------------------------------------+
| 1 |
+------------------------------------------------------+
SELECT ELEMENT_AT(CAST('123' AS VARIANT), "");
+----------------------------------------+
| ELEMENT_AT(CAST('123' AS VARIANT), "") |
+----------------------------------------+
| |
+----------------------------------------+