如何将字符串分割并展成表格的SQL实现改成?

摘要:一、场景案例 在数据开发类项目中,常常会遇到需要将字符串进行切割并展开成表格的场景,如以下两种常见的案例: 标签类型数据:如将员工标签类型的数据 - 技能:Java、Spring、微服务、项目管理 - 项目经验:电商、金融、教育- 工作风格
一、场景案例 在数据开发类项目中,常常会遇到需要将字符串进行切割并展开成表格的场景,如以下两种常见的案例: 标签类型数据:如将员工标签类型的数据 - 技能:Java、Spring、微服务、项目管理 - 项目经验:电商、金融、教育 - 工作风格:#执行力强 #跨部门协作 #数据驱动 分类层级数据:如将组织部门层级数据:“/集团/分公司/信息技术部/数据团队” 除此之外,在一些特定的业务场景中,如证券场景中,需要将一笔回购合约涉及到的多个质押券进行拆分(提取每个质押券有质押数量及对应标准券转换比例),数据示例如下: 另外,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将字符串切割并转换成表 select string_to_array('apple,banana,orange', ',') as item; select string_to_array('apple|banana|orange', '|') as item; select unnest(string_to_array('apple,banana,orange', ',')) as item; select regexp_split_to_array('apple|banana|orange', '\|') as item; select regexp_split_to_table('apple|banana|orange', '\|') as item; View Code Oracle 利用connect by + Level来实现 WITH CTE_DATA AS ( SELECT 'tom' AS NAME, 'apple,banana,cherry' AS FRUIT FROM DUAL ) SELECT NAME, REGEXP_SUBSTR(FRUIT, '[^,]+', 1, LEVEL) AS FRUIT FROM CTE_DATA CONNECT BY REGEXP_SUBSTR(FRUIT, '[^,]+', 1, LEVEL) IS NOT NULL ; View Code MySQL 5.x+版本只能使用数字辅助表+SUBSTRING_INDEX。
阅读全文