MySQL字符串拆分,实现split(explode)功能
MySQL字符串拆分,实现split(explode)功能
更详细讲解请参考此篇文章,以下为简化后的个人理解版
- 需求场景:需要统计每条数据中stories单独作为一列查出来

要解决的点主要有两个,一个是可能存在坏数据(比如逗号出现在了第一位或最后一位),另一个是如何以
,分割坏数据:通过MySQL的TRIM()函数处理
1
TRIM(BOTH ',' FROM `stories`)
以
,分割首先通过REPLACE()函数将
,去除,再与去除前的stories字段值的LENGTH()相减,可以得出一共有多少个,(记得首先去除两侧的,)

利用SUBSTRING_INDEX()函数,参数传入正值,获取第n个
,为分隔符之前的所有字符
通过上边可以想到,只要能遍历当前条数据中stories字段含有的
,数量 次,就可以分别取到第一个、第二个、第三个…,前的所有字符了,再对SUBSTRING_INDEX()的结果进行一次SUBSTRING_INDEX()操作,这次参数传入负值,这里传入-1,即取最后一个,之后的所有字符。即实现了每次获取第 n 和 n + 1 个,之间的字符这里的 n 需要递增,这里使用MySQL库的helo_topic_id来作为变量,因为help_topic_id是自增的,当然,也可以用其他表的自增字段辅助(要确保连续自增,以实现类似 n++ 的操作)
最终实现代码:
1
2
3
4
5
6SELECT
id,
SUBSTRING_INDEX( SUBSTRING_INDEX( stories, ',', ht.help_topic_id), ',', -1 ) AS roleId
FROM
zt_release
INNER JOIN mysql.help_topic ht ON ht.help_topic_id <= ( LENGTH( stories ) - LENGTH( REPLACE ( stories, ',', '' )) + 1 )
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 无尽infinite!

