mysql 逗号分隔变多行_MySQL:将逗号分隔的列表分成多行

MySQL没有临时表重用,并且函数不返回行。

我在Stack Overflow中找不到任何东西可以将csv整数字符串转换为行,因此我在MySQL中编写了自己的代码。

DELIMITER $$

DROP PROCEDURE IF EXISTS str_split $$

CREATE PROCEDURE str_split(IN str VARCHAR(4000),IN delim varchar(1))

begin

DECLARE delimIdx int default 0;

DECLARE charIdx int default 1;

DECLARE rest_str varchar(4000) default '';

DECLARE store_str varchar(4000) default '';

create TEMPORARY table IF NOT EXISTS ids as (select  parent_item_id from list_field where 1=0);

truncate table ids;

set @rest_str = str;

set  @delimIdx = LOCATE(delim,@rest_str);

set @charIdx = 1;

set @store_str = SUBSTRING(@rest_str,@charIdx,@delimIdx-1);

set @rest_str = SUBSTRING(@rest_str from @delimIdx+1);

if length(trim(@store_str)) = 0   then

set @store_str = @rest_str;

end if;

INSERT INTO ids

SELECT (@store_str + 0);

WHILE @delimIdx <> 0 DO

set  @delimIdx = LOCATE(delim,@rest_str);

set @charIdx = 1;

set @store_str = SUBSTRING(@rest_str,@charIdx,@delimIdx-1);

set @rest_str = SUBSTRING(@rest_str from @delimIdx+1);

select @store_str;

if length(trim(@store_str)) = 0   then

set @store_str = @rest_str;

end if;

INSERT INTO ids(parent_item_id)

SELECT (@store_str + 0);

END WHILE;

select parent_item_id from ids;

end$$

DELIMITER ;

call str_split('1,2,10,13,14',',')

如果不使用整数,则还需要转换为其他类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值