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

PG数据库的Jsonb全文检索查询

1.操作键值对

PostgreSQL 对 jsonb 类型的筛选查询可以使用 -> 或者 ->> 操作符。

  • -> 操作符用于通过 JSON 对象中的键来获取对应的值。
  • ->> 操作符可以将获取到的值提取出来转化为字符串类型。

例如,下面是一个包含 jsonb 类型字段的表:

CREATE TABLE test (
  id SERIAL PRIMARY KEY,
  data JSONB
);
 
INSERT INTO test (data) VALUES ('{"name": "John", "age": 30, "city": "New York"}');
INSERT INTO test (data) VALUES ('{"name": "Jane", "age": 25, "city": "Los Angeles"}');

我们可以通过下面这中查询方式进行全库的全文检索查询

-- 获取所有数据
SELECT * FROM test;
 
-- 根据 jsonb 字段中的键值进行查询
SELECT * FROM test WHERE data -> 'name' = '"John"';
-- 注意:键名需要用单引号括起来,并且值需要用双引号括起来。
 
-- 使用 ->> 将键对应的值提取出来进行查询
SELECT * FROM test WHERE data ->> 'age' = '30';

上面这个提取出来的例子可能不明显

下面添加一个复杂的json例子

{
    "caseInfo": {
        "caseNo": "C20xxxxxxxxx8212566",
        "reportNo": "P2xxxxxxxxxxxxxxxxx3004",
        "applyTime": 17xxxxxxxxx5000,
        "companyId": 1xx00,
        "treatType": "1",
        "createFrom": 1xxx1,
        "companyName": "中国xxxxxxxxxxx公司",
        "processType": "2xx",
        "accidentDate": 171xxxxxxxx1000,
        "accidentType": "xx1x",
        "hospitalCode": "xxxxxxxxx35",
        "hospitalName": "台xxxxxxxxxxxx院",
        "hospitalLevel": "",
        "medicalFinish": "",
        "firstCompanyId": 0987654,
        "injuredFromArea": "ytgrefds",
        "insuranceTypeId": "",
        "firstCompanyName": "中xxxxxxxxxxxx限公司",
        "hospitalAttribute": "",
        "uploadUserOrgCode": "",
        "totalSettlementAmount": 0
    },
    "patientInfo": {
        "name": "邱76y5t432",
        "idCard": "33sacdvfgbdcs1232675",
        "address": "asadfghfdsa村",
        "birthday": sadcsxazxsc000,
        "cardType": "asdsad",
        "idDueDay": 2asxcv bgdfsc000,
        "genderCode": "1"
    },
    "applyUserInfo": {
        "nationality": "CHN",
        "applyUserName": "",
        "applyUserIdCard": "",
        "applyUserBirthday": "",
        "applyUserCardType": "",
        "applyUserIdDueDay": "",
        "applyUserGenderCode": "",
        "applyUserPatientRelation": ""
    }
}

这个时候提取的作用就显得明显了很多

--  ->> 提取测试sql,将applyUserInfo下的nationality提取出来,做一维sql标准查询
SELECT count(*)
FROM case_service.cs_case_model
WHERE (cs_case_model.case_model_detail -> 'applyUserInfo' ->> 'nationality') like '%C%';

结果:


http://www.kler.cn/a/329088.html

相关文章:

  • 植物明星大乱斗15
  • 第8章 硬件维护-8.6 产品变更管理(PCN)
  • 网络安全领域的最新动态和漏洞信息
  • 大学作业:城市PM2.5预测分析数据挖掘大作业资源源码免费下载
  • Cesium 相机系统
  • 深度学习的实践层面
  • 【React】useState 和 useRef:项目开发中该如何选择
  • R开头的后缀:RE
  • C++平台跳跃游戏
  • 智慧环保大数据平台建设方案
  • Windows 开发工具使用技巧 Visual Studio使用安装和使用技巧 Visual Studio 快捷键
  • httpsok-v1.17.0-SSL通配符证书自动续签
  • css-容器高度百分比(%),容器内的文字垂直居中
  • 梳理相关新闻报道:Linux惊现9.9分灾难级漏洞
  • Linux篇之IO多路复用
  • 滚雪球学MySQL[6.2讲]:MySQL数据恢复详解:从备份中恢复数据与策略
  • 关于BSV区块链覆盖网络的常见问题解答(上篇)
  • 【游戏分组】
  • 网络抓包04 - SSLSocket
  • Oracle bbed编译安装及配置
  • 深入Volatile
  • 【数据结构】MapSet
  • spring loCDI 详解
  • 文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于节点碳势响应的新型电力系统鲁棒优化调度 》
  • springbot,JWT令牌的使用。实现http请求拦截校验。
  • 如何使用ssm实现影院管理系统的设计与实现