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](如要打开 ...
随机推荐
- splice删除元素后返回的是一个数组
let arr = [51,68,98,78];let result = arr.splice(1,1);//[68]let arr2 = [51,68,98,78];let result2 = ar ...
- TensorFlow入门(矩阵基础)
1.placeholder 占位符 可以通过run方法传入值 测试代码如下: # encoding:utf-8 import tensorflow as tf # placeholder 占位符 可以 ...
- 我的python笔记05
Python 之路 Day5 - 常用模块学习 本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve ...
- Eclipse项目工程导入到IDEA继续开发-超详细
现在Java开发的主流工具是IDEA,不是说Eclipse,各有各的特色.不过我现在深深的爱上了idea这个工具. 但是之前很多项目都是用eclipse开发的,现在就转入到idea中进行继续开发. 1 ...
- Java基本语法--程序流程控制
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块.流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:顺序结构.分支结构.循环结构.本篇博客主要是对 ...
- Python内置方法/函数
abs() 返回数字的绝对值. abs(x) all() 用于判断给定的可迭代参数 iterable 中的所有元素是否都为 TRUE,如果是返回 True,否则返回 False. 元素除了是 0.空. ...
- ASP.NET Identity-验证与授权及管道事件
https://www.cnblogs.com/OceanEyes/p/thinking-in-asp-net-mvc-apply-asp-net-identity-authentication.ht ...
- 微信小程序 selectComponent 值为null
这个东西的执行时间感觉有点迷, 我遇到的情况是在page 的onReady onShow 当中 使用 selectComponent 无法获取到子组件的对象 只好退而求其次 在需要触发的方法当中 ...
- Android 开发OOM解决方案
OOM(Out Of Memory)在加载图片过多或者过大的情况下会发生OOM,可以查看APP最高可用内存: int maxMemory = (int) (Runtim.getRuntime().ma ...
- php 基础系列之 php快速入门
·插补操作 将简单变量写入一个由双引号引用的字符串中,就叫插补操作.例如: $test = 'xx'; echo "你好:$test"; 注意:插补操作只是双引号引用字符串的特性. ...