PostGreSql - 提取jsonb数据
2024-09-04 21:12:58
本文主要介绍如何在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
最新文章
- LintCode Interleaving String
- PS中的图像知识
- c++11 实现单例模式
- intellij idea 14 ULTIMATE 注册码
- 速度 Github
- Web Api初试
- H5与CS3权威下.19 选择器(2)结构性伪类选择器
- SQL复习四(完整性约束)
- 【JDK1.8】JDK1.8集合源码阅读——TreeMap(二)
- 给大家推荐一个python的学习网站 http://www.codecademy.com
- Math.pow();Math.sqrt();
- Python3.6及以上pip安装pymssql错误的解决办法[Windows&;Linux freetds安装]
- Visual Studio 2017的一些使用记录
- Spring IOC注入接口多实现解决
- Houdini技术体系 基础管线(四) :Houdini驱动的UE4植被系统 上篇
- C++ allocator
- redis aof和rdb区别
- python os.path.splitext()
- HTTP之Cookie
- Java接口多线程并发测试 (二)
热门文章
- PL/SQL快键键——自动替换(输入sf直接跳出来select * from)
- java中类的构造方法出错点
- Mapped Statements collection does not contain value for xxx
- C++——动态内存分配2-创建对象数组
- Codeforces Round #601 (Div. 2) E1	 Send Boxes to Alice (Easy Version)
- 继 “多闪”后“飞聊”再被diss?其实社交还能这么玩
- visdom使用监视训练过程的应用,viz.line参数说明
- oracle 数据库手动备份和恢复
- 安全相关的Linux知识
- 同一域名的ASP.NET网站实现Session共享