本文主要介绍如何在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. SpringData JPA快速入门和基本的CRUD操作以及Specifications条件查询

    SpringData JPA概述: SpringData JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作 ...

  2. Linux -初体验笔记

    课堂笔记 鸟哥Linux私房菜 Linux 版本很多,内核都是一样的 计算机基础知识: 1.完整计算机系统:软件+硬件 硬件:物理装置本身,计算机的物质基础 软件:相对硬件而言, 程序:计算机完成一项 ...

  3. PM2的参数配置

    https://github.com/jawil/blog/issues/7 配置项: name  应用进程名称:script  启动脚本路径:cwd  应用启动的路径,关于script与cwd的区别 ...

  4. 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke。”

    出现场景: From1中事件B绑定在事件A,事件A由工厂模式下的设备产生,当离开Form1时,设备中的事件A仍然会触发事件B,此时就会导致如上问题 原因(个人理解): 1.Form1已经被销毁了,但仍 ...

  5. jfinal 拦截器中判断是否为pjax请求

    个人博客 地址:http://www.wenhaofan.com/article/20180926013919 public class PjaxInterceptor implements Inte ...

  6. Python标准库之shutil模块

    高级的文件.文件夹.压缩包处理模块. 文件复制 copyfileobj 将文件类对象 fsrc 的内容拷贝到文件类对象 fdst. shutil.copyfileobj(fsrc, fdst[, le ...

  7. Mac下Charles的安装和配置

    一.安装与破解 官网下载,破解方法参考其他,此处略 二.配置 1.电脑端安装 Charles 的根证书 注意:此时钥匙串默认为不信任,需设置为始终信任 2.配置代理:勾选enable transpre ...

  8. JDBC——ResultSet结果集对象

    ResultSet结果集对象,封装结果.它是怎么做到封装结果的呢? 游标,类似指针索引最初指在“列名”上,要取到数据就需要让游标向下移动移动后就指向了第一行数据,然后通过一些方法把第一行的每一列都取出 ...

  9. python3爬虫(4)各种网站视频下载方法

    python3爬虫(4)各种网站视频下载方法原创H-KING 最后发布于2019-01-09 11:06:23 阅读数 13608 收藏展开理论上来讲只要是网上(浏览器)能看到图片,音频,视频,都能够 ...

  10. [Codechef CHSTR] Chef and String - 后缀数组

    [Codechef CHSTR] Chef and String Description 每次询问 \(S\) 的子串中,选出 \(k\) 个相同子串的方案有多少种. Solution 本题要求不是很 ...