Mysql实现字符串分割功能,将字符串分割为多行数据

在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

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值