当前位置: 首页 > news >正文

PostgreSQL 查询json/jsonb是否存在某个片段

文章目录

  • 前言
  • 实现
    • 实现思路
    • 坑1
    • 坑2
    • 坑3
  • 恍然大悟


前言

在PostgreSQL中,jsonb有额外的操作符,如 @>、<@、?、?|、?& 可以用来查询是否包含路径/值,以及顶层键值是否存在。

详细文章:PostgreSQL 操作json/jsonb

那么,如果我们不知道路径,只想要查询json/jsonb是否存在某个片段,那就跟我一起来学习吧!


实现

实现思路

思路:使用 ::text 将json/jsonb转换成为文本,再通过 like 关键字进行模糊查询。

示例:

select '{"a": {"b":{"c":"foo"}}}'::json::text like '%"c":"foo"%'; -- true

可以看到,结果返回true,这种思路是正确的。

不过。。。

坑1

再来看一组示例:

select '{"a": {"b":{"c":"foo"}}}'::json::text like '%"b":{"c": "foo"}%'; -- false

结果返回false,为什么呢?请思考一下。

在这里插入图片描述

细心的同学可能发现了,'%"b":{"c": "foo"}%' 这段文本的 "c": 后面多了一个空格。

坑2

那好吧,把冒号后面的空格删除掉,示例:

select '{"a": {"b":{"c":"foo"}}}'::jsonb::text like '%"c":"foo"%'; -- false

结果还是返回false,为什么呢?

坑3

冒号后面加上空格

select '{"a": {"b":{"c":"foo"}}}'::jsonb::text like '%"b": {"c": "foo"}%'; -- true

结果返回true,为什么呢?两段文本明明就不匹配。

因为我偷偷把 json 换成了 jsonb

在这里插入图片描述

恍然大悟

看看 jsonjosnb 转换成text的格式。

select '{"a": {"b":{"c":"foo"}}}'::jsonb; -- {"a": {"b": {"c": "foo"}}}
select '{"a": {"b":{"c":"foo"}}}'::json; -- {"a": {"b":{"c":"foo"}}}

有没有恍然大悟?🤭

http://www.lryc.cn/news/97340.html

相关文章:

  • Spring 官方文档及相关资料的网址集合
  • hypery 十一、命令行
  • QT占位符 %n+arg()、QString的格式化arg(补零/进制转换)
  • 浙江大学第六周数据结构之06-图1 列出连通集
  • DNS缓存病毒防护43.227.220
  • Spring MVC -- 返回数据(静态页面+非静态页面+JSON对象+请求转发与请求重定向)
  • k8s集群部署(使用kubeadm部署工具进行快速部署,相关对应版本为docker20.10.0+k8s1.23.0)
  • SIP视频对讲sip广播网关
  • prometheus直方图实践
  • 【C语言进阶篇】指针都学完了吧!那回调函数的应用我不允许还有人不会!
  • 专注:如何提高专注力和注意力的简要指南
  • Linux查看内存的几种方法
  • selenium定位rect元素
  • uniapp <textarea>组件的踩坑
  • README.md 文档使用 treer 生成树形项目结构
  • 朝花夕拾思维导图怎么画?看看这种绘制方法
  • Python - OpenCV、OCR识别摄像头中的文字
  • 金融中的数学:贝叶斯公式
  • ClickHouse单节点安装配置
  • AtcoderABC231场
  • opengauss数据库快速安装
  • 前端中的LocalStorage和SessionStorage
  • 论文工具——写论文好用的绘图工具(甘特图+流程图+网络模型图+泳道图)
  • Vite构建的vue3项目修改网站标题和图标
  • 平安私人银行受邀慈善服务高质量发展会议,分享慈善规划服务
  • MySQL主从复制、读写分离
  • Redis配置与优化
  • leetCode刷题记录3-面试经典150题
  • MySQL优化(面试)
  • 华为鸿蒙HarmonyOS4发布即巅峰,车机系统、多模态交互等实现突破