我有String asdasDWdfef,rgrgtggt,weef,我希望输出像表格一样,如下图所示
ID decription1 asdasDWdfef2 rgrgtggt3 weef
为此,我创建了一个程序
这是我的程序
DEliMITER ;;CREATE Procedure Split(_RowData text,_Delimeter text)BEGIN DECLARE _Iterator INT default 1; DECLARE _Foundindex INT; DECLARE _Data varchar(255); SET _Foundindex = LOCATE(_Delimeter,_RowData); DROP table IF EXISTS _RtnValue; CREATE temporary table _RtnValue(ID INT auto_INCREMENT NOT NulL,description text,primary key(ID)); WHILE _Foundindex > 1 DO INSERT INTO _RtnValue (description) SELECT _Data = LTRIM(RTRIM(SUBSTRING(_RowData,1,_Foundindex - 1))); set _RowData = SUBSTRING(_RowData,_Foundindex + LENGTH(_Delimeter) / 2,LENGTH(_RowData)); SET _Iterator = _Iterator + 1; SET _Foundindex = LOCATE(_Delimeter,_RowData); END WHILE; INSERT INTO _RtnValue(description) SELECT _Data = LTRIM(RTRIM(_RowData)); select * from _RtnValue;END
但是当我使用以下命令执行它时
call Split('asdasDWdfef,weef',',');
它给了我以下输出:
ID decription1 NulL2 NulL3 NulL
请让我知道如何解决这个问题.
我正在使用MysqL.最佳答案我得到了答案
首先创建新功能
CREATE FUNCTION SPliT_STR(x VARCHAR(255),delim VARCHAR(12),pos INT)RETURNS VARCHAR(255)RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x,delim,pos),LENGTH(SUBSTRING_INDEX(x,pos -1)) + 1),'');
然后创建存储过程
DEliMITER ;;CREATE PROCEDURE Split(in fullstr varchar(255))BEGIN DECLARE a INT Default 0 ; DECLARE str VARCHAR(255); DROP table IF EXISTS my_temp_table; CREATE temporary table my_temp_table(ID INT auto_INCREMENT NOT NulL,primary key(ID)); simple_loop: LOOP SET a=a+1; SET str=SPliT_STR(fullstr,",a); IF str='' THEN LEAVE simple_loop; END IF; #Do Inserts into temp table here with str going into the row insert into my_temp_table (description) values (str); END LOOP simple_loop; select * from my_temp_table;END
之后我通过调用Split调用它(‘asas,d,sddf,dfd’);它给了我想要的输出.
每个建议都是Thanx.
总结以上是内存溢出为你收集整理的MySQL字符串由逗号运算符分隔全部内容,希望文章能够帮你解决MySQL字符串由逗号运算符分隔所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)