- 类别:
:doc:`/sql-reference/functions-semistructured`(提取)
GET¶
从 ARRAY 或 label-data_type_object`(或者包含 ARRAY 或 OBJECT 的 :ref:`label-data_type_variant)中提取一个值。
如果任一实参为 NULL,则函数返回 NULL。
请注意,此函数不应与 GET DML 命令混淆。
语法¶
ARRAY(或包含 ARRAY 的 VARIANT)
GET( <array> , <index> )
GET( <variant> , <index> )
OBJECT(或包含 OBJECT 的 VARIANT)
GET( <object> , <field_name> )
GET( <variant> , <field_name> )
MAP
GET( <map> , <key> )
实参¶
array
计算结果为 ARRAY 的表达式。
index
计算结果为 INTEGER 的表达式。这指定要从 ARRAY 中检索的元素的位置。该位置是基于 0 的,而不是基于 1 的。
如果索引指向数组边界之外,或者索引元素不存在(在稀疏数组中):
如果
array
为半结构化 ARRAY,则该函数返回 NULL。如果
array
是结构化 ARRAY,则会发生错误。
variant
计算结果为包含 ARRAY 或 OBJECT 的 VARIANT 的表达式。
object
计算结果为包含键值对的 OBJECT 的表达式。
field_name
计算结果为 VARCHAR 的表达式。这指定了您想要检索值的键值对中的键。
field_name
不能是空字符串。如果
object
是 结构化 OBJECT,则必须为field_name
指定一个常数。如果
object
不包含指定键:如果
object
为半结构化 OBJECT,则该函数返回 NULL。如果
object
是结构化 OBJECT,则会发生错误。
map
计算结果为 MAP 的表达式。
key
您要检索其值的键值对中的键。
如果
map
不包含指定的键,则该函数返回 NULL。
返回¶
返回值是 ARRAY 的指定元素,或者是对应于 OBJECT 中键值对的指定键的值。
如果输入对象是半结构化 OBJECT、ARRAY 或 VARIANT,则该函数返回 VARIANT。数据类型为 VARIANT,因为:
在 ARRAY 中,每个元素都属于 VARIANT 类型。
在 OBJECT 中,每个键值对中的值都是 VARIANT 类型。
如果输入对象是 结构化 OBJECT、结构化 ARRAY 或 MAP,该函数返回为该对象指定的类型的值。
例如,如果输入对象的类型是 ARRAY(NUMBER),则该函数返回 NUMBER。
使用说明¶
GET 对
field_name
应用区分大小写的匹配。对于不区分大小写的匹配,请使用 GET_IGNORE_CASE。如果第一个参数是 VARIANT 类型:
如果第二个参数是 VARCHAR 类型(例如
field_name
),则该函数在variant
不包含 OBJECT 的情况下返回 NULL。如果第二个参数是 INTEGER 类型(例如
index
),则该函数在variant
不包含 ARRAY 的情况下返回 NULL。
示例¶
创建一个包含示例数据的表:
CREATE TABLE vartab (a ARRAY, o OBJECT, v VARIANT); INSERT INTO vartab (a, o, v) SELECT ARRAY_CONSTRUCT(2.71, 3.14), OBJECT_CONSTRUCT('Ukraine', 'Kyiv'::VARIANT, 'France', 'Paris'::VARIANT), TO_VARIANT(OBJECT_CONSTRUCT('weatherStationID', 42::VARIANT, 'timestamp', '2022-03-07 14:00'::TIMESTAMP_LTZ::VARIANT, 'temperature', 31.5::VARIANT, 'sensorType', 'indoor'::VARIANT)) ;SELECT a, o, v FROM vartab; +---------+----------------------+-------------------------------------------------+ | A | O | V | |---------+----------------------+-------------------------------------------------| | [ | { | { | | 2.71, | "France": "Paris", | "sensorType": "indoor", | | 3.14 | "Ukraine": "Kyiv" | "temperature": 31.5, | | ] | } | "timestamp": "2022-03-07 14:00:00.000 -0800", | | | | "weatherStationID": 42 | | | | } | +---------+----------------------+-------------------------------------------------+
提取 ARRAY 的第一个元素:
SELECT GET(a, 0) FROM vartab; +-----------+ | GET(A, 0) | |-----------| | 2.71 | +-----------+
给定一个国家的名称,从包含国家名称和首都城市的 OBJECT 中提取该国首都城市的名称:
SELECT GET(o, 'Ukraine') FROM vartab; +-------------------+ | GET(O, 'UKRAINE') | |-------------------| | "Kyiv" | +-------------------+
从包含 OBJECT 的 VARIANT 中提取温度:
SELECT GET(v, 'temperature') FROM vartab; +-----------------------+ | GET(V, 'TEMPERATURE') | |-----------------------| | 31.5 | +-----------------------+
有关更详细的示例,请参阅 查询半结构化数据。
有关将 GET 与 XMLGET 结合使用的示例,请参阅 XMLGET 中的示例和用法说明部分。