当前位置: 首页 > news >正文

MySQL的类split方法实现

MySQL 8 使用递归 CTE 拆分字符串并去重

在 MySQL 里没有内置的 split 函数,想要把 '各省教育厅、各省人力资源和社会保障厅' 这样的字段按 顿号(、) 拆分成多行,可以借助 递归 CTE + REGEXP_SUBSTR 来实现。

示例

假设表结构如下:

CREATE TABLE dept_table (id INT AUTO_INCREMENT PRIMARY KEY,dept VARCHAR(255)
);INSERT INTO dept_table (dept) VALUES
('各省教育厅'),
('各省教育厅、各省人力资源和社会保障厅'),
('各省人力资源和社会保障厅'),
('各省发展和改革委员会、各省人力资源和社会保障局'),
('各省发展和改革委员会'),
('各省人力资源和社会保障局');

递归拆分

WITH RECURSIVE cte AS (-- 第一次取第1段SELECT id, dept,1 AS idx,REGEXP_SUBSTR(dept, '[^、]+', 1, 1) AS partFROM dept_tableUNION ALL-- 递归取第 idx+1 段SELECT id, dept,idx + 1,REGEXP_SUBSTR(dept, '[^、]+', 1, idx + 1)FROM cteWHERE REGEXP_SUBSTR(dept, '[^、]+', 1, idx + 1) IS NOT NULL
)
SELECT DISTINCT TRIM(part) AS part
FROM cte
WHERE part IS NOT NULL
ORDER BY part;

结果

各省人力资源和社会保障厅
各省人力资源和社会保障局
各省发展和改革委员会
各省教育厅

小结

  • REGEXP_SUBSTR(dept, '[^、]+', 1, n):取字符串中第 n 段。
  • 递归 CTE 控制 n 的增长,直到取不到新值。
  • 最终用 DISTINCT 去重即可。

这种方式通用性强,不管字段里有多少个顿号,都能正确拆分。

http://www.dtcms.com/a/354363.html

相关文章:

  • Java表格处理详解以及结合实际项目使用
  • WebStrom-如何设置前端项目快捷启动
  • 29. String, StringBuffer,StringBuilder 的区别是什么
  • 统一虚拟试穿框架OmniTry:突破服装局限,实现多品类可穿戴物品虚拟试穿无蒙版新跨越。
  • 【小白笔记】网速
  • TypeScript:完整的函数类型书写方式
  • 【开题答辩全过程】以超市管理系统为例,包含答辩的问题和答案
  • Linux 系统核心调优:CPU、磁盘 I/O、网络与内核参数实战
  • 流行蝴蝶剑高清重制版Windows10可玩!
  • 小程子找Bug之for循环的初始化表达类型
  • 【美团】放它一马
  • 今日行情明日机会——20250827
  • 即时配送运营平台系统功能分析
  • 寄存器, 堆栈, 汇编指令详解
  • 入门概念|Thymeleaf与Vue
  • 企业微信对接 代理 WXJava Ngnix映射 weixin-java-cp
  • Vue 登录页高低分辨率背景图优化实现
  • mathtype公式存在乱码
  • SqlHelper类的方法详细解读和使用示例
  • Libvio访问异常排查指南
  • sql server 取起始日期到结束日期中自然月最后一天,与日期维度行转列
  • 数据治理:AI健康血液的生命线
  • Elasticsearch数据迁移快照方案初探(一):多节点集群配置踩坑记
  • Anaconda的安装与使用
  • 文本分块的优化策略-语义完整性、控制长度、重叠切分、结合模型,考虑大模型输入限制
  • matlab的app中传递数据
  • 林墨2025全新个人EP《嘻嘻呵呵嘿嘿哈哈》 第三支单曲解锁
  • 【数据分享】安徽省安庆市地理基础数据(道路、水系、铁路、行政边界(含乡镇)、DEM等)
  • 企业分支上云的常见误区与纠正方案
  • LeetCode - 反转链表 / K 个一组翻转链表