- 类别:
半结构化和结构化数据函数 (数组/对象)
OBJECT_CONSTRUCT_KEEP_NULL¶
返回一个 OBJECT,从保留含 NULL 值的键值对的实参构造。
- 另请参阅:
语法¶
OBJECT_CONSTRUCT_KEEP_NULL( [<key>, <value> [, <key>, <value> , ...]] )
OBJECT_CONSTRUCT_KEEP_NULL(*)
实参¶
key
键值对中的键。每个键都是一个 VARCHAR 值。
value
与键关联的值。该值可以是任何数据类型。
*
当使用星号(通配符)调用时,OBJECT 值使用属性名称作为键,使用关联的值作为值,从指定的数据构造。请参阅以下示例。
当您将通配符传递给函数时,您可以使用表的名称或别名来限定通配符。例如,要传入名为
mytable
的表中的所有列,请指定以下内容:(mytable.*)
您还可以使用 ILIKE 和 EXCLUDE 关键字进行筛选:
ILIKE 筛选条件,用于查找与指定模式匹配的列名。只允许使用一种模式。例如:
(* ILIKE 'col1%')
EXCLUDE 筛选出与指定列或列不匹配的列名。例如:
(* EXCLUDE col1) (* EXCLUDE (col1, col2))
使用这些关键字时,限定符有效。以下示例使用 ILIKE 关键字筛选出与表
mytable
中的模式col1%
相匹配的所有列:(mytable.* ILIKE 'col1%')
ILIKE 和 EXCLUDE 关键字不能组合在单个函数调用中。
对于此函数,ILIKE 和 EXCLUDE 关键字仅在 SELECT 列表或 GROUP BY 子句中有效。
关于 ILIKE 和 EXCLUDE 关键字的更多信息,请参阅 SELECT 中的“参数”部分。
返回¶
返回值的数据类型是 OBJECT。
使用说明¶
如果键为 NULL(即 SQL NULL),则结果对象中将省略键值对。但是,如果值为 NULL,则保留键值对。
构造的对象不一定保留键值对的原始顺序。
示例¶
此示例显示了 OBJECT_CONSTRUCT 和 OBJECT_CONSTRUCT_KEEP_NULL 之间的区别:
SELECT OBJECT_CONSTRUCT('key_1', 'one', 'key_2', NULL) AS WITHOUT_KEEP_NULL,
OBJECT_CONSTRUCT_KEEP_NULL('key_1', 'one', 'key_2', NULL) AS KEEP_NULL_1,
OBJECT_CONSTRUCT_KEEP_NULL('key_1', 'one', NULL, 'two') AS KEEP_NULL_2;
+-------------------+-------------------+------------------+
| WITHOUT_KEEP_NULL | KEEP_NULL_1 | KEEP_NULL_2 |
|-------------------+-------------------+------------------|
| { | { | { |
| "key_1": "one" | "key_1": "one", | "key_1": "one" |
| } | "key_2": null | } |
| | } | |
+-------------------+-------------------+------------------+
下面的示例还显示了 OBJECT_CONSTRUCT 和 OBJECT_CONSTRUCT_KEEP NULL 之间的区别,但此示例使用一个小表(在查询之前显示):
CREATE TABLE demo_table_1_with_nulls (province VARCHAR, created_date DATE);
INSERT INTO demo_table_1_with_nulls (province, created_date) VALUES
('Manitoba', '2024-01-18'::DATE),
('British Columbia', NULL),
('Alberta', '2024-01-19'::DATE),
(NULL, '2024-01-20'::DATE);
SELECT *
FROM demo_table_1_with_nulls
ORDER BY province;
+------------------+--------------+
| PROVINCE | CREATED_DATE |
|------------------+--------------|
| Alberta | 2024-01-19 |
| British Columbia | NULL |
| Manitoba | 2024-01-18 |
| NULL | 2024-01-20 |
+------------------+--------------+
SELECT OBJECT_CONSTRUCT(*) AS oc,
OBJECT_CONSTRUCT_KEEP_NULL(*) AS oc_keep_null
FROM demo_table_1_with_nulls
ORDER BY oc_keep_null['PROVINCE'];
+----------------------------------+----------------------------------+
| OC | OC_KEEP_NULL |
|----------------------------------+----------------------------------|
| { | { |
| "CREATED_DATE": "2024-01-19", | "CREATED_DATE": "2024-01-19", |
| "PROVINCE": "Alberta" | "PROVINCE": "Alberta" |
| } | } |
| { | { |
| "PROVINCE": "British Columbia" | "CREATED_DATE": null, |
| } | "PROVINCE": "British Columbia" |
| | } |
| { | { |
| "CREATED_DATE": "2024-01-18", | "CREATED_DATE": "2024-01-18", |
| "PROVINCE": "Manitoba" | "PROVINCE": "Manitoba" |
| } | } |
| { | { |
| "CREATED_DATE": "2024-01-20" | "CREATED_DATE": "2024-01-20", |
| } | "PROVINCE": null |
| | } |
+----------------------------------+----------------------------------+
有关使用密切相关函数 OBJECT_CONSTRUCT 的示例,请参阅 OBJECT_CONSTRUCT。