sql - 如何检查包含字段和类似值的 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"}]
解决方案
您需要取消嵌套数组,以便能够在其中的每个元素上使用运算符。
这可以在一个共同相关的子查询中完成:
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
推荐阅读
- azure - Terraform-Azure:授予组对 azure 资源的访问权限
- autodesk-forge - Autodesk Forge Design Automation - 打开模型时出错 - 如何绕过“模型已从远程位置传输”对话框
- powerbi - DAX 获取最后一个销售额为正的日期,无论日期行上下文
- angular - Wed Apr 08 2020 00:00:00 GMT+0530 (India Standard Time), how to get a time using mat date picker in angular
- reactjs - 在 Popover 中引用 null
- javascript - 在发送 Ajax 请求之前更改光标以等待
- java - Android:下载文件 octet-stream 网络视图
- javascript - 从 Vue.JS 方法中导入 JSON 文件 - Electron
- jquery - Laravel - 如何获取 Laravel 更改的两个日期之间的差异并将结果加载到文本框中
- python - 显示 FITS 文件内容