在Java中我们可以通过String对象的split方法将字符串按指定字符分割为字符串数组,但是MySQL中没有为我们提供字符串分割功能,今天在工作中遇到了这种需求,找到了解决办法,分享给大家
场景: 有组织表(带树形结构的那种)其中有一个字段为tree-path记录了当前部门的所有父级部门的id例如 1-10-13表示该组织的父级组织是13,13的父级组织是10,10的父级组织是1,我查询当前用户的组织结构。如交通运输厅本机-财务部-财务负责人因此需要对tree-path进行分割后通过 in 查询。
解决方案一
1 创建存储过程
CREATE FUNCTION split(
x VARCHAR(255),
delim VARCHAR(12),
pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '');
函数解析:传入三个参数第一个为要分割的字符,第二个为以什么分割,第三个参数为分割后区第几位
2 调用该过程进行查询
select split('1,2,3,4,5',',',help_topic_id)
from mysql.help_topic
where help_topic_id between 1 and length('1,2,3,4,5') -length(replace('1,2,3,4,5',',',''));
解析:这里利用了mysql自带的一个表 mysql.help_topic 他的help_topic_id是从0到643连续的,然后我们只需要控制 help_topic_id为字符串分割后的数量即可
解决方案二
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX('7654,7698,7782,7788',',',help_topic_id+1),',',-1) AS num
FROM
mysql.help_topic
WHERE
help_topic_id < LENGTH('7654,7698,7782,7788')-LENGTH(REPLACE('7654,7698,7782,7788',',',''))+1
参考:https://www.cnblogs.com/gered/p/10797012.html