PostGreSql - 提取jsonb数据
本文主要介绍如何在PostGreSql中提取出jsonb类型字段中的某个key的值
参考:https://www.cnblogs.com/mywebnumber/p/5551092.html
一、简单模式
- 只有一个{}
# 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' - 只有一个[]
# rule_config字段格式
[
"zero",
"one",
"two"
] # 获取第一个元素
SELECT
rule_config ->0 AS cardType
FROM
t_free_ride_card_rule_config
WHERE
title = '测试0211' - 两个{}并列
# 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数据的更多相关文章
- 转:SQL SERVER数据库中实现快速的数据提取和数据分页
探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...
- [转] PostgreSQL学习手册(数据表)
from: http://www.cnblogs.com/stephen-liu74/archive/2012/04/23/2290803.html 一.表的定义: 对于任何一种关系型数据库而言,表都 ...
- 测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇
测试开发Python培训:抓取新浪微博评论提取目标数据-技术篇 在前面我分享了几个新浪微博的自动化脚本的实现,下面我们继续实现新的需求,功能需求如下: 1,登陆微博 2,抓取评论页内容3,用正则表 ...
- jmeter之beanshell提取json数据
Jmeter BeanShell PostProcessor提取json数据 假设现有需求: 提取sample返回json数据中所有name字段对应的值,返回的json格式如下: {“body”:{“ ...
- python操作MONGODB数据库,提取部分数据再存储
目标:从一个数据库中提取几个集合中的部分数据,组合起来一共一万条.几个集合,不足一千条数据的集合就全部提取,够一千条的就用一万减去不足一千的,再除以大于一千的集合个数,得到的值即为所需提取文档的个数. ...
- 使用PostgreSQL存储时序数据
操作系统 :CentOS7.3.1611_x64 PostgreSQL版本 :9.6 问题描述 在InfluxDB中存储时序数据时,当tag值和时间戳都相同时会执行覆盖操作.在PostgreSQL中能 ...
- PostgreSQL学习手册(数据表)<转>
一.表的定义: 对于任何一种关系型数据库而言,表都是数据存储的最核心.最基础的对象单元.现在就让我们从这里起步吧. 1. 创建表: CREATE TABLE products ( ...
- 20170601xlVBA正则表达式提取体检数据
Public Sub GetFirst() GetDataFromWord "初检" End Sub Public Sub GetDataFromWord(ByVal SheetN ...
- 用AutoHotkey实现Excel从表B提取匹配数据到表A
说明:为表述方便,待填的表为[表A],资料库的表称为[表B].该工具可以快捷地从[表B]中提取相关数据到[表A],顺序和列可自定义. 使用方法:1.打开[ExcelGetFromB.exe](如要打开 ...
随机推荐
- 0002 Django工程创建
1 创建一个目录,用于专门存放Django工程的虚拟环境 PyCharm默认虚拟环境在工程内,从而导致打包的时候,会把虚拟环境一起打包. 同时,虚拟环境中的插件较多,一个工程创建了一个虚拟环境,以后, ...
- codeforces刷题记录
Codefest 19 (open for everyone, rated, Div. 1 + Div. 2) C. Magic Grid 这种题直接构造 数n是2的n次方的倍数的时候可以这样划分数 ...
- 微信小程序weui的使用
大家好,我是前端菜鸟,大家可以叫我惊蛰,今天给大家分享一下在微信小程序中对weui的引入和使用,其他的也不再赘述,文中有不对的还请指正,谢谢. 直入主题: 1.下载weui 进入GitHub http ...
- Qtree3 - 树链剖分
打完以后才发现写复杂了……算了懒得改了 #include <bits/stdc++.h> using namespace std; ],fa[][],size[],wson[],vis[] ...
- jenkins Exec exit status not zero. Status [-1]
jenkins是使用ssh连接服务器后,如果使用grep获取进程并kill时,会jenkins Exec exit status not zero. Status [-1],解决办法:在获取进程时,使 ...
- HDU-2036 改革春风吹满地 (数学)
Problem Description "改革春风吹满地,不会AC没关系;实在不行回老家,还有一亩三分地.谢谢!(乐队奏乐)" 话说部分学生心态极好,每天就知道游戏,这次考试如此简 ...
- JUC-ThreadPool线程池
一.为什么用线程池 例子:10年前单核CPU电脑,假的多线程,像马戏团小丑玩多个球,CPU需要来回切换. 现在是多核电脑,多个线程各自跑在独立的CPU上,不用切换效率高. 线程池的优势: 线程池做的工 ...
- Java注释&标识符
注释: 单行注释:// 多行注释:/* */ 文档注释:/** */ 其中文档注释可以Export导出dox文档,常用Javadox标记如下: @author:指定Java程序的作者 @vers ...
- cocos Studio 特效文件播放失败
可能是json文件中file的Path不对引起的.因为生成的path是根据文件在项目中的path生成的,即当此特效不是项目的一级目录时,会带有项目中上级目录,导致找不到文件(不会报错). ccs.lo ...
- Codeforces Round #601 (Div. 2) C League of Leesins
把每一次输入的一组数字存下来,然后把每个数字出现的组数存下来 然后找只出现过一次的数字a,那么这个数字a不是开头就是结尾,默认为开头(是哪个都无所谓),然后去找和它出现在同一组的两个数字b和c,而b和 ...