类别:

半结构化和结构化数据函数 (数组/对象)

OBJECT_CONSTRUCT_KEEP_NULL

返回一个 OBJECT,从保留含 NULL 值的键值对的实参构造。

另请参阅:

OBJECT_CONSTRUCT

语法

OBJECT_CONSTRUCT_KEEP_NULL( [<key>, <value> [, <key>, <value> , ...]] )

OBJECT_CONSTRUCT_KEEP_NULL(*)
Copy

实参

key

键值对中的键。每个键都是一个 VARCHAR 值。

value

与键关联的值。该值可以是任何数据类型。

*

当使用星号(通配符)调用时,OBJECT 值使用属性名称作为键,使用关联的值作为值,从指定的数据构造。请参阅以下示例。

当您将通配符传递给函数时,您可以使用表的名称或别名来限定通配符。例如,要传入名为 mytable 的表中的所有列,请指定以下内容:

(mytable.*)
Copy

您还可以使用 ILIKE 和 EXCLUDE 关键字进行筛选:

  • ILIKE 筛选条件,用于查找与指定模式匹配的列名。只允许使用一种模式。例如:

    (* ILIKE 'col1%')
    
    Copy
  • EXCLUDE 筛选出与指定列或列不匹配的列名。例如:

    (* EXCLUDE col1)
    
    (* EXCLUDE (col1, col2))
    
    Copy

使用这些关键字时,限定符有效。以下示例使用 ILIKE 关键字筛选出与表 mytable 中的模式 col1% 相匹配的所有列:

(mytable.* ILIKE 'col1%')
Copy

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;
Copy
+-------------------+-------------------+------------------+
| 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);
Copy
SELECT *
  FROM demo_table_1_with_nulls
  ORDER BY province;
Copy
+------------------+--------------+
| 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'];
Copy
+----------------------------------+----------------------------------+
| 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

语言: 中文