本文主要介绍如何在PostGreSql中提取出jsonb类型字段中的某个key的值

参考:https://www.cnblogs.com/mywebnumber/p/5551092.html

一、简单模式

  1. 只有一个{}

    # rule_config 字段格式
    {
    "cardType": 1,
    "sellPrice": null,
    "originPrice": 15
    } # 获取cardType
    SELECT
    rule_config -> 'cardType' AS cardType
    FROM
    t_free_ride_card_rule_config
    WHERE
    title = '测试0211'

      

  2. 只有一个[]
    # rule_config字段格式
    [
    "zero",
    "one",
    "two"
    ] # 获取第一个元素
    SELECT
    rule_config ->0 AS cardType
    FROM
    t_free_ride_card_rule_config
    WHERE
    title = '测试0211'
  3. 两个{}并列
    # rule_config字段格式
    [
    {
    "ruleGuid": "1125720873758932994",
    "mcardType": 1,
    "packStart": "2020-02-14", },
    {
    "ruleGuid": "1073055433702576129",
    "mcardType": 1,
    "packExpire": "2020-02-18"
    }
    ] # 获取key为ruleGuid 和 ruleGuid 的值
    SELECT
    json_array_elements ( rule_config :: json ) -> 'ruleGuid' AS ruleGuid,
    json_array_elements ( rule_config :: json ) -> 'mcardType' AS mcardType
    FROM
    t_free_ride_card_rule_config
    WHERE
    title = '测试0211'

二、复杂格式

  • jsonb数据格式如下

    [
    {
    "platform": 0,
    "cardPackage": [
    {
    "ruleGuid": "1125720873758932994",
    "mcardType": 1,
    "packStart": "2020-02-14",
    "packExpire": "2020-02-15"
    },
    {
    "ruleGuid": "1073055433702576129",
    "mcardType": 1,
    "packStart": "2020-02-16",
    "packExpire": "2020-02-18"
    }
    ],
    "platformExpire": "2020-02-18"
    }
    ]
  • 获取相关字段的sql
    # 第一种,嵌套sql
    SELECT
    bottom :: json ->> 'ruleGuid' AS ruleGuid
    FROM
    (
    SELECT
    json_array_elements ( cardPackage ) AS bottom
    FROM
    ( SELECT expire_info :: json -> 'cardPackage' AS cardPackage FROM ( SELECT expire_info :: json -> 0 AS expire_info FROM t_ev_month_card WHERE user_new_id = '1200107139' ) AS A ) AS B
    ) AS F

    说明:
    第一层sql:SELECT expire_info :: json -> 0 AS expire_info FROM t_ev_month_card WHERE user_new_id = '1200107139' 获取到最外层1个{}的数据,命名为expire_info列
    第二层sql:从最外层花括号里expire_info获取到 key = “cardPackage” 的内容 expire_info :: json -> 'cardPackage' ,命名为 cardPackage列
    第三层sql:将cardPackage列的内容分为单独的{}
    第四层sql:从每个单独的{}中取出ruleGuid字段(见 一、(1)节)
    # 第二种,
    SELECT (json_array_elements((expire_info -> 0):: json ->'cardPackage'))->'ruleGuid' AS a
    FROM t_ev_month_card WHERE user_new_id = '1200107139'

    如果数据类型是jsonb,也可以将json替换成jsonb:

  

SELECT
bottom :: jsonb -> 'ruleGuid' AS ruleGuid
FROM
(
SELECT
jsonb_array_elements ( cardPackage ) AS bottom
FROM
(
SELECT
expire_info :: jsonb -> 'cardPackage' AS cardPackage
FROM
(
SELECT
expire_info :: jsonb -> 0 AS expire_info
FROM
t_ev_month_card
WHERE
user_new_id = '1200107139'
) AS A
) AS B
) AS F

PostGreSql - 提取jsonb数据的更多相关文章

  1. 转:SQL SERVER数据库中实现快速的数据提取和数据分页

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  2. [转] PostgreSQL学习手册(数据表)

    from: http://www.cnblogs.com/stephen-liu74/archive/2012/04/23/2290803.html 一.表的定义: 对于任何一种关系型数据库而言,表都 ...

  3. 测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇

    测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇   在前面我分享了几个新浪微博的自动化脚本的实现,下面我们继续实现新的需求,功能需求如下: 1,登陆微博 2,抓取评论页内容3,用正则表 ...

  4. jmeter之beanshell提取json数据

    Jmeter BeanShell PostProcessor提取json数据 假设现有需求: 提取sample返回json数据中所有name字段对应的值,返回的json格式如下: {“body”:{“ ...

  5. python操作MONGODB数据库,提取部分数据再存储

    目标:从一个数据库中提取几个集合中的部分数据,组合起来一共一万条.几个集合,不足一千条数据的集合就全部提取,够一千条的就用一万减去不足一千的,再除以大于一千的集合个数,得到的值即为所需提取文档的个数. ...

  6. 使用PostgreSQL存储时序数据

    操作系统 :CentOS7.3.1611_x64 PostgreSQL版本 :9.6 问题描述 在InfluxDB中存储时序数据时,当tag值和时间戳都相同时会执行覆盖操作.在PostgreSQL中能 ...

  7. PostgreSQL学习手册(数据表)<转>

    一.表的定义: 对于任何一种关系型数据库而言,表都是数据存储的最核心.最基础的对象单元.现在就让我们从这里起步吧.    1. 创建表:    CREATE TABLE products (      ...

  8. 20170601xlVBA正则表达式提取体检数据

    Public Sub GetFirst() GetDataFromWord "初检" End Sub Public Sub GetDataFromWord(ByVal SheetN ...

  9. 用AutoHotkey实现Excel从表B提取匹配数据到表A

    说明:为表述方便,待填的表为[表A],资料库的表称为[表B].该工具可以快捷地从[表B]中提取相关数据到[表A],顺序和列可自定义. 使用方法:1.打开[ExcelGetFromB.exe](如要打开 ...

随机推荐

  1. VsCode开发Java SpringBoot遇到的问题

    报错截图 报错一:Build failed, Do you want to continue? 编译失败,你想继续吗? 报错二:ConfigError:The Project "Demo&q ...

  2. unrecognized import path "golang.org/x/*"的解决办法

    由于国内网络原因,因此访问https://golang.org/网站会被限制.所以在go get下载其他第三方包的时候,如果这个第三方包又引用了https://golang.org/x/下的包,通常会 ...

  3. Accept Xcode/iOS License to run git

    在没有安装Xcode的情况下, 使用了 webstorm 的git,提示 安装xcode,安装完成后,并没有打开xcode,而是再次使用git,发现 提示 输入以下命令行: sudo xcodebui ...

  4. OSI协议

    物理层: 网线连接在客户端计算机上,其实是连接在了计算机的一个叫做网卡的设备上,网卡是专门负责与外界通信的.网线一般是双绞线或者光缆,也可以使用无线电波,中间经过交换机,路由器,防火墙等等一堆设备统称 ...

  5. JS高级---案例:验证密码的强度

    案例:验证密码的强度 1. 给我密码,我返回对应的级别 2. 每次键盘抬起都要获取文本框中的内容, 验证文本框中有什么东西, 得到一个级别, 然后下面的div显示对应的颜色 <!DOCTYPE ...

  6. hashlib加密模块_python

    一.hashlib模块 1.功能 主要用于字符串加密 2.常用方法 md5()/sha1():创建一个md5或者sha1加密模式的hash对象update(arg):用字符串参数来更新hash对象,如 ...

  7. eclipse的一些使用

    1.恢复默认视图 window->perspective->open perspective ->open java 2.打开其他的一些视图,比如server(tomcat,目前使用 ...

  8. 可持久化0-1 Trie 简介

    Trie树是字符串问题中应用极为广泛的一种数据结构,可以拓展出AC自动机.后缀字典树等实用数据结构. 然而在此我们考虑0-1 Trie的应用,即在序列最大异或问题中的应用. 这里的异或是指按位异或.按 ...

  9. python3 yield实现假的多并发

    import time def fun1(): while True: print("fun1") time.sleep(0.1) yield def fun2(): while ...

  10. How to Create an OCM Response file to Apply a Patch in Silent Mode - opatch silent

    Windows Server 2019 打补丁时缺少Oracle Configuration Manager(OCM) 响应文件处理方式. 适用: Oracle Universal Installer ...