跳到主要内容

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. 数组索引从 1 开始,不是从 0 开始;
  2. 支持负数索引,-1 表示最后一个元素,-2 表示倒数第二个,以此类推;
  3. ELEMENT_AT(container, key_or_index) 函数的功能与 container[key_or_index] 作用一致(详细见示例)。

示例

  1. 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 |
    +--------------+
  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 |
    +--------------------------+
  3. 访问 MAP 中不存在的 KEY,会返回 NULL

     SELECT ELEMENT_AT({"a": 1, "b": 2}, "c");
    +-----------------------------------+
    | ELEMENT_AT({"a": 1, "b": 2}, "c") |
    +-----------------------------------+
    | NULL |
    +-----------------------------------+
  4. 访问 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), "") |
    +----------------------------------------+
    | |
    +----------------------------------------+