字符串分割并展开成表格的SQL实现方法

一、场景案例

在数据开发类项目中,常常会遇到需要将字符串进行切割并展开成表格的场景,如以下两种常见的案例:

1.标签类型数据:如将员工标签类型的数据

复制代码
- 技能:Java、Spring、微服务、项目管理
- 项目经验:电商、金融、教育
- 工作风格:#执行力强 #跨部门协作 #数据驱动

2.分类层级数据:如将组织部门层级数据:"/集团/分公司/信息技术部/数据团队"

除此之外,在一些特定的业务场景中,如证券场景中,需要将一笔回购合约涉及到的多个质押券进行拆分(提取每个质押券有质押数量及对应标准券转换比例),数据示例如下:

另外,API请求的返回的数据多为半结构化的字典列表数据,需要将每行数据从列表中进行提取出来再进行后续的处理,如以下数据:

复制代码
{"data": [   {"AMOUNT":-9000,"SUB_TYPE_NAME":"债券分销","BRANCH_NAME":"银行间","TYPE_NAME":"收入","BUSI_DATE":"20250831","PROJECT_NAME":"调整1月分销佣金-24****MTN001"},
    {"AMOUNT":-1075.61,"SUB_TYPE_NAME":"债券分销","BRANCH_NAME":"银行间","TYPE_NAME":"收入","BUSI_DATE":"20250531","PROJECT_NAME":"调整计提1月及3月分销佣金"}
    ],
"success":true
}

二,各类主流SQL方言实现方法

针对这类场景,目前没有标准SQL函数支持实现该功能。各类SQL方言通过自定义方法进行支持,以下是常用的实现方法。

Spark/Hive SQL

采用split + explode(及升级版posexplode)。以下为测试案例:

利用该方法可以轻松的回购质押券进行拆分处理:

PostgreSQL

有两种方法:

方法一:首先利用string_to_array将字符串切割成数组,然后利用unnest将数组扩展成表

方法二:直接利用regexp_split_to_table将字符串切割并转换成表

Oracle

利用connect by + Level来实现

MySQL

5.x+版本只能使用数字辅助表+SUBSTRING_INDEX。

复制代码
SELECT 
    o.order_id,
    j.product_id
FROM orders o
JOIN JSON_TABLE(
    CONCAT('["', REPLACE(o.product_ids, ',', '","'), '"]'),
    '$[*]' COLUMNS (product_id INT PATH '$')
) AS j;

SQL Server

早期版本无内置函数,只能通过自定义表值函数(TVF)或者XML方法

2016之后的版本可使用原生方法STRING_SPLIT

复制代码
--带序号的版本(SQL Server 2022+)
SELECT value, ordinal
FROM STRING_SPLIT('a,b,c', ',', 1) -- 第三个参数启用序号

三、结论

  Spark SQL、PostgreSQL最方便,思路也比较相似,都是先将字符串拆分数组,然后扩展成表。SQLServer新版本实现较为方法,直接一个函数搞定。Oracle利用其connect by来实现,也相对便捷,只是相对主流SQL方言比较小众一点。Mysql新版本相对方便一点,老版本需要辅助表增加维护成本。

文章转载自: ++大汪的数据之路++

原文链接: https://www.cnblogs.com/davablog/p/19497701

体验地址: http://www.jnpfsoft.com/?from=001YH

相关推荐
guodingdingh10 小时前
软件开发工作问题总结0718
java·开发语言·数据库
GuWenyue11 小时前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
Csvn12 小时前
📊 SQL 入门 Day 8:集合操作 — 用 SQL 做数学里的"并交差"
后端·sql
Miao1213113 小时前
某海外住宿平台如何在大规模场景下实现指标一致性:Minerva 指标平台实践
大数据·数据库·人工智能
CodexDave13 小时前
MySQL事务隔离级别与MVCC机制解析
前端·数据库·mysql·nginx·性能优化·负载均衡
碎光拾影13 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
曾阿伦14 小时前
MongoDB 查询语句备忘手册
数据库·mongodb
一叶龙洲14 小时前
wslg打开Ubuntu24.04默认打开图形界面
linux·服务器·数据库·ubuntu
CCPC不拿奖不改名14 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
爬也要爬着前进15 小时前
redis主从搭建
数据库·redis·缓存