如何选择JSON字段中具有特定键的所有行?

时间:2019-07-29 05:36:19

标签: sql json postgresql

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

具有以下示例行:

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!"}

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:-1)

使用MySQL可以使用以下语法完成

   SELECT *
    FROM the_table
    WHERE LOCATE("subject", object_details) > 0 ;

PostgreSQL是(PostgreSQL区分大小写):-

 SELECT *
   FROM the_table
   WHERE POSITION('subject' IN LOWER(object_details)) > 0;