本文主要介绍如何在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

最新文章

  1. LintCode Interleaving String
  2. PS中的图像知识
  3. c++11 实现单例模式
  4. intellij idea 14 ULTIMATE 注册码
  5. 速度 Github
  6. Web Api初试
  7. H5与CS3权威下.19 选择器(2)结构性伪类选择器
  8. SQL复习四(完整性约束)
  9. 【JDK1.8】JDK1.8集合源码阅读——TreeMap(二)
  10. 给大家推荐一个python的学习网站 http://www.codecademy.com
  11. Math.pow();Math.sqrt();
  12. Python3.6及以上pip安装pymssql错误的解决办法[Windows&Linux freetds安装]
  13. Visual Studio 2017的一些使用记录
  14. Spring IOC注入接口多实现解决
  15. Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 上篇
  16. C++ allocator
  17. redis aof和rdb区别
  18. python os.path.splitext()
  19. HTTP之Cookie
  20. Java接口多线程并发测试 (二)

热门文章

  1. PL/SQL快键键——自动替换(输入sf直接跳出来select * from)
  2. java中类的构造方法出错点
  3. Mapped Statements collection does not contain value for xxx
  4. C++——动态内存分配2-创建对象数组
  5. Codeforces Round #601 (Div. 2) E1 Send Boxes to Alice (Easy Version)
  6. 继 “多闪”后“飞聊”再被diss?其实社交还能这么玩
  7. visdom使用监视训练过程的应用,viz.line参数说明
  8. oracle 数据库手动备份和恢复
  9. 安全相关的Linux知识
  10. 同一域名的ASP.NET网站实现Session共享