mysql数组分割成多列

CREATE TABLE sub_array (
testName VARCHAR(30) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8;

– 分割函数
DROP FUNCTION IF EXISTS func_sub ;
DELIMITER //
CREATE FUNCTION func_sub(f_name VARCHAR(1000),f_comma VARCHAR(55),f_index INT)
RETURNS VARCHAR(255)
BEGIN
DECLARE result VARCHAR(255) DEFAULT ‘’;
SET result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(f_name,f_comma,f_index)),f_comma,1));
RETURN result;
END//

– 拼接成多列列
DROP PROCEDURE IF EXISTS sub_proc ;
DELIMITER //
CREATE PROCEDURE sub_proc(IN f_name VARCHAR(1000))
BEGIN

DECLARE f_nameTemp VARCHAR(1000) DEFAULT ‘’;
DECLARE f_comma VARCHAR(1000) DEFAULT ‘,’;
DECLARE f_index INT(11) DEFAULT 1;
DECLARE end_while INT(11) DEFAULT 0;
DECLARE comma_index INT(11) DEFAULT 0;
DECLARE result VARCHAR(2000) DEFAULT ‘’;
DECLARE exe_sql VARCHAR(1000) DEFAULT ‘’;

SET f_nameTemp=f_name;
WHILE 0=end_while DO
SET comma_index=CAST(LOCATE(’,’,f_name) AS SIGNED INTEGER);
IF comma_index=0 THEN
SET end_while=1;
END IF;
SET f_name=SUBSTRING(f_name,LENGTH(SUBSTRING_INDEX(f_name,’,’,1))+2);
SET result=CONCAT_WS(’,’,result,CONCAT(‘func_sub(’,CONCAT(’’’’,f_nameTemp,’’’’),CAST(f_comma AS CHAR),CONCAT(’’’’,CAST(f_comma AS CHAR),’’’’),CAST(f_comma AS CHAR),f_index,’)’));
SET f_index = f_index+1;
SET comma_index=0;
END WHILE;
SET result=SUBSTRING(result,LENGTH(SUBSTRING_INDEX(result,’,’,0))+2);
SET exe_sql=CONCAT(‘select ‘,result,’ FROM sub_array’);
SET @exesql = exe_sql;
PREPARE Statement FROM @exesql;
EXECUTE Statement;
DEALLOCATE PREPARE Statement;
END//

CALL sub_proc(‘1,2,3,4,5,6,7,8’);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值