PostgreSQL 关于Jsonb字段的处理详解(长期更)
大家好,在开发的过程中由于业务复杂多变,普通的字符串格式满足不了业务开发需求,可能会用到jsonb字段去处理格外逻辑的业务。
话不多说,
1.一般jsonb存储的逻辑是,一个字段里面存储多条数据,以id为存储对象举例,该jsonb字段中存储的多个对象的id,如图所展示
2.其次就是jsonb字段里面存储的是以k,v键值对形式的数据。
根据这两种情况我们如何对其数据信息筛选或者处理呢,首先是根据条件2的情况去进行提取需要的数据
SELECT base_message_info ->>'dialog' FROM "base_message"//解释:查询 该字段中k为 'dialog'对应v 的值 在后面的表中
结果:
其次根据条件1的情况去提取需要的数据,
敲重点,假设一个业务,我们需要将jsonb里面存储的id进行连表查询,且里面存储的数据是需要去掉括号以及字符串的,并且需要列转行,那需要怎么办呢?
笔者这里提供一种解决方式
1.将数据全部先转成字符串的数据类型,因为连表查询的数据类型要一致
( base_authority_condition_button.sys_role_ids ) :: CHARACTER VARYING AS sys_role_ids
2.其次就是将jsonb里面的[],"",这些字符去掉,或转化为空字符串,然后列转行
SELECTv_attribute_permission.ID,v_attribute_permission.NAME,regexp_split_to_table(REPLACE (REPLACE ( REPLACE ( ( v_attribute_permission.sys_role_ids ) :: TEXT, '[' :: TEXT, '' :: TEXT ), '"' :: TEXT, '' :: TEXT ),']' :: TEXT,'' :: TEXT ),'\,' :: TEXT ) AS sys_role_ids
FROMv_attribute_permission
WHERE( ( v_attribute_permission.del_flag ) :: TEXT = '1' :: TEXT )//解释一下列传行笔者用的函数是 regexp_split_to_table,就是将jonsb里面的数据根据特定的字符串进行转行
//代替用的是replace,就是将数据里面的所有指定的数据中的字符串转化为期待的字符
3,将字符串转化为jsonb格式,且行转列用 jsonb_object_agg 这个函数
4,如果不确定转换之后的格式是什么可以用到 pg_typeof(your_variable)这个函数,查询自己字段函数类型
PostgreSQL 关于Jsonb字段的处理详解(长期更)相关推荐
- 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解...
salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解 建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schema ...
- SQL全方位攻略:5. SQL “方言”大比拼:Oracle、MySQL、PostgreSQL限制检索行数语法详解(分页查询)
系列文章目录 SQL全方位攻略:1.数据库介绍 SQL全方位攻略:2.SQL介绍 SQL全方位攻略:3.SQL标准 SQL全方位攻略:4. 标准SQL和SQL"方言" 文章目录 系 ...
- xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程)
xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程) 注:本文通过研究各种情况下实体编码和JS编码是否生效,进而总结了哪些情况下能够进行编码后,javascript代码依然能够正常执行. 解 ...
- php字段验证规则,详解ThinkPHP中自动验证及验证规则
本篇文章详细介绍了thinkphp中自动验证及验证规则的方法,希望对学习thinkphp的朋友有帮助! 详解ThinkPHP中自动验证及验证规则 ThinkPHP 内置了数据对象的自动验证功能来完成模 ...
- 使用order by排序判断返回结果的列数,order by排序判断字段数原理详解
「作者主页」:士别三日wyx order by排序猜解列数原理详解 一.order by的两种使用方式 1)按照字段名排序 2)按照索引排序 二.order by怎么判断字段数? 1)正常的排序 3) ...
- JDBC详解(四):操作BLOB类型字段(超详解)
JDBC详解(四):操作BLOB类型字段 前言 一.MySQL BLOB类型 二.向数据表中插入大数据类型 三.修改数据表中的Blob类型字段 四.从数据表中读取大数据类型 前言 本博主将用CSDN记 ...
- mysql数据库字段变形_详解如何利用amoeba(变形虫)实现mysql数据库读写分离
摘要:这篇MySQL栏目下的"详解如何利用amoeba(变形虫)实现mysql数据库读写分离",介绍的技术点是"MySQL数据库.数据库读写分离.amoeba.MySQL ...
- 在Mysql中count(*)、count(1)与count(字段/列名)的详解—聚合函数count
目录 一.简单区别 二.效率比较 三.举例 3.1创建表 3.1.1利用count(*)进行统计所有行的数目 3.1.2利用count(1)进行统计所有行的数目 3.1.3利用count(字段/列名) ...
- 数据库字段属性的详解
好比C++中,定义int类型需要多少字节,定义double类型需要多少字节一样,MySQL对表每个列中的数据也会实行严格控制,这是数据驱动应用程序成功的关键.M前言 好比C++中,定义int类型需要多 ...
最新文章
- 攀枝花市大数据中心落户东区
- C++找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(也可能没有鞍点)
- python中单行注释_Python中的单行、多行、中文注释方法
- git merge 与 git rebase的区别
- VDI序曲十四 使用 RemoteFX 安装和配置 USB 重定向
- php为什么查询语句加上order by就显示不出来,sql会查出结果 php页面偶尔显示空白 没有从sql得到结果...
- 四川教育考试网全国计算机,四川教育考试院
- Java 自定义HashSet
- Dxg——立创EDA [LCEDA] 开发笔记整理分类合集【所有的相关记录,都整理在此】
- 2019国人工资报告:月薪过万是个槛?大部分网友表示月薪不足5K!
- Python进阶读书笔记之(四) set集合
- Apache+tomcat实现应用服务器集群
- oracle自动加一天,如何将Oracle 当前日期加一天、一分钟
- 纯CSS3制作逼真的iphone 6手机模型
- 关于数加服装ERP软件/系统的功能模块与应用的介绍
- 连接redis服务器提示:Redis Client On Error Error connect ECONNREFUSED 127.0.0.16380 Config right
- 浅谈文化创意产业与创意城市 | 上海城市规划
- 物联网概论(IoT)_Chp10 智慧地球与物联网应用/M2M/共享单车/无人驾驶
- 提升策划能力提升的法宝
- 【链环科技】智能硬件APP开发——通过硬件对接,实现软件与硬件设备的完美结合