mysql 字符串分割函数

本文介绍了一种使用SQL函数来解析并转换输入字符串的方法,该方法可以将指定格式的ID列表转换为对应的名称列表,适用于数据库操作场景。

需求:


现在有个表 app

id    app_name

1      a

2      b

3      c

4     d

在数据库中传一个 1,2,3过来 要得到 a,b,c这样的结果


-- 函数如下:

-- i_str 表示传进去的 字符串    f_delimit 表示分隔符

drop function if exists func_get_split_string;
create function func_get_split_string(i_str varchar(128), f_delimit varchar(3))
returns varchar(512)
begin
  set @rs = '';
  set @i = length(i_str) - length(replace(i_str,f_delimit,''));  -- 算出分隔符的总数
  set @sub_str = i_str;
  set @left_str = i_str;
  while @i>0                -- 有多少个分隔符就循环多少遍
  do
  set @sub_str = substr(@left_str,1,instr(@left_str,f_delimit)-1);            -- 得到分隔符前面的字符串
  set @left_str = substr(@left_str,length(@sub_str)+length(f_delimit)+1);     -- 得到分隔符后面的字符串
  set @n = trim(@sub_str);
  select  COALESCE(max(app_name),'') into @split_string from app where id = @n;   -- 用分隔符前面的字符串关联查询表
  set @i = @i - 1;
  set @rs = concat(@rs,',',@split_string);            --  将得到的结果放到结果串
  end while;
  set @n = trim(@left_str);
  select  COALESCE(max(app_name),'') into @split_string from app where id = @n;
  set @rs = concat(@rs,',',@split_string);
return substr(@rs,2) ;    -- 返回去掉最前面的 ,
end;

-- 调用函数的办法 

select func_get_split_string('1,2,3',',');


注意:

1. 遇到这样的错误

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de

解决办法 执行 :set global log_bin_trust_function_creators=TRUE;


2. 在函数中 select @变量 := 字段 from 表名 ;这样的语句是不能通过的, 但是在过程里面是可以的。

Not allowed to return a result set from a function



评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值