首页 > 解决方案 > 如何选择 JSON 字段中具有特定键的所有行?

问题描述

我想选择表中的所有行,其中我的“object_details”JSON 字段包含以下键之一:“subject”、“Subject”、“SUBJECT”。

使用以下示例行:

datetime             | object_details                                             
---------------------+------------------------------------------------------------
2019-07-21T00:01:34Z | {"Sender": "bob@example.com", "Subject": "First email!"}   
2019-07-23T09:30:01Z | {"Sender": "carol@example.com", "subject": "Second email!"}
2019-07-27T22:23:15Z | {"Sender": "dave@example.com", "protocol": "SMTP"}         

我期望结果只提供这些行:

datetime             | object_details                                             
---------------------+------------------------------------------------------------
2019-07-21T00:01:34Z | {"Sender": "bob@example.com", "Subject": "First email!"}   
2019-07-23T09:30:01Z | {"Sender": "carol@example.com", "subject": "Second email!"}

标签: sqljsonpostgresql

解决方案


您可以使用 exists 运算符,该运算符?| 将键数组作为其输入:

select *
from the_table
where object_details ?| array['subject', 'Subject', 'SUBJECT'];

推荐阅读