首页 > 解决方案 > 如何检查包含字段和类似值的 JSON 字符串?

问题描述

我有一个 JSON:

[{"name": "Criss", "idNumber": "2177"}, {"name": "Kate", "idNumber": "6234"}]
[{"name": "Alex"}, {"name": "Paul"}]
[{"name": "Emma", "idNumber": "2056"}, {"name": "Isabella", "idNumber": "8832"}]
[{"name": "Olivia", "idNumber": "2163"}, {"name": "Greck", "idNumber": "8585"}]

我需要找到所有行,其中包含字段idNumber并且值必须是like '21%'

我使用@>运算符检查包含。但是如何检查LIKE

预期结果:

[{"name": "Criss", "idNumber": "2177"}, {"name": "Kate", "idNumber": "6234"}]
[{"name": "Olivia", "idNumber": "2163"}, {"name": "Greck", "idNumber": "8585"}]

标签: sqljsonpostgresql

解决方案


您需要取消嵌套数组,以便能够在其中的每个元素上使用运算符。

这可以在一个共同相关的子查询中完成:

select t1.*
from the_table t1
where exists (select *
              from jsonb_array_elements(t1.d) as x(e)
              where x.e ->> 'idNumber' like '21%');

无需idNumber单独测试密钥是否存在,因为如果密钥不存在,->>它将返回。null

在线示例:https ://rextester.com/KZY46113


推荐阅读