网站首页 > 技术文章 正文
来个MySQL大神写一段拆分字符串的语句
在MySQL 5.7中拆分字符串,你可以使用一系列的字符串函数组合来实现。下面是一个示例,展示了如何在没有递归CTEs的情况下拆分逗号分隔的字符串:
假设你有一个表table1,其中有一个字段col1包含逗号分隔的字符串,你想要将这个字段拆分成多行。
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(t.col1, ',', numbers.n), ',', -1) AS value
FROM
(SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4) numbers
INNER JOIN table1 t ON CHAR_LENGTH(t.col1)
-CHAR_LENGTH(REPLACE(t.col1, ',', '')) >= numbers.n-1
WHERE
n <= 1 + (CHAR_LENGTH(t.col1) - CHAR_LENGTH(REPLACE(t.col1, ',', '')))
ORDER BY
t.col1,
n;
在这个查询中,我们创建了一个数字表numbers,它包含了一系列的数字,这些数字代表了可能的最大逗号数量。然后,我们使用INNER JOIN将这个数字表与table1连接起来,基于col1字段中逗号的数量。
SUBSTRING_INDEX函数用于获取逗号分隔的字符串中的特定部分。外部的SUBSTRING_INDEX用来获取第n个逗号之前的所有内容,而内部的SUBSTRING_INDEX用来从该子字符串中获取最后一个逗号之后的内容,即第n个值。
WHERE子句用于过滤那些由于逗号数量不足而产生的空字符串。ORDER BY子句用于确保结果的顺序是正确的。
请注意,这种方法依赖于你提前知道或者能够估计col1字段中可能出现的最大逗号数量。你需要根据这个数量来扩展numbers表。上面的示例中,我们假设了最大逗号数量为3,因此只包含了到4的数字(因为n是从1开始的)。
如果你不确定最大逗号数量,你可能需要在应用程序层面进行拆分,或者使用动态SQL来构建这个查询。但是,请注意,动态SQL在MySQL中通常是通过存储过程来实现的,而在MySQL 5.7中,你不能直接在存储过程外部使用动态SQL。因此,对于复杂的拆分需求,通常建议在应用程序中进行处理。
猜你喜欢
- 2024-09-14 Mysql:替换某个字段中的部分字符串——replace函数
- 2024-09-14 plsql字符串分割浅谈(plsql字符串截取)
- 2024-09-14 oracle函数--INSTR、SUBSTR使用说明和实例讲解
- 2024-09-14 详解Oracle使用substr和instr截取字符串指定位置的字符
- 2024-09-14 mysql 替换某一个字段中的字符串(mysql替换一个字符串的字符函数为)
- 2024-09-14 sql注入总结(sql注入示例)
- 2024-09-14 Mybatis 中的 DAO 接口和 XML 文件里的 SQL他们如何建立关系?
- 2024-09-14 SQL Server - 字符串常用操作(sqlserver 字符类型)
- 2024-09-14 如何在Java中比较字符串?(如何在java中比较字符串个数)
- 2024-09-14 SQL截取函数(substr)与字符串查找函数(Instr)的组合应用
- 1512℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 556℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 504℃MySQL service启动脚本浅析(r12笔记第59天)
- 482℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 480℃启用MySQL查询缓存(mysql8.0查询缓存)
- 460℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 440℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 438℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)