当前位置:Gxlcms > mysql > MySQL字符串分割自定义函数_MySQL

MySQL字符串分割自定义函数_MySQL

时间:2021-07-01 10:21:17 帮助过:98人阅读

bitsCN.com
/***方法一*/select * from dbo.split(’01__02__03’,’__’)   发生错误,返回的结果不是我们原本要的结果:   -------------------  --想要的结果   01   02   03  -----------------   --实际结果:   01   _02   _03   以前我也写过类似的字符串分割自定义函数,也没有想过上面出现的这样问题。   我原来的函数是这样的:   /*   StringToTable   */   CREATE FUNCTION StringToTable(@StringX varchar(8000),@Split nvarchar(10))   RETURNS @TableResult TABLE(TableID nvarchar(20))   AS   BEGIN   DECLARE @Index int
  SET @Index=CHARINDEX(@Split,@StringX,1)   WHILE (@Index>=1)   BEGIN   INSERT INTO @TableResult SELECT LEFT(@StringX,@Index-1)   SELECT   @StringX=RIGHT(@StringX,LEN(@StringX)-@Index),@Index=CHARINDEX(@Split,@StringX,1)   END   IF(@StringX<>’’) INSERT INTO @TableResult SELECT @StringX   RETURN   END   使用类似的select * from dbo.split(’01__02__03’,’__’) 一样出问题。   经过一下的修改就可以了,修改后程序为:  /*   StringToTable   */   CREATE FUNCTION StringToTable(@StringX varchar(8000),@Split nvarchar(10))   RETURNS @TableResult TABLE(TableID nvarchar(20))   AS   BEGIN   DECLARE @Index int   DECLARE @LenIndex int   SELECT @LenIndex=LEN(@Split),@Index=CHARINDEX(@Split,@StringX,1)   WHILE (@Index>=1)
  BEGIN   INSERT INTO @TableResult SELECT LEFT(@StringX,@Index-1)   SELECT   @StringX=RIGHT(@StringX,LEN(@StringX)-@Index-@LenIndex+1),@Index=CHARINDEX(@Split,@Stri   ngX,1)   END   IF(@StringX<>’’) INSERT INTO @TableResult SELECT @StringX   RETURN   END /***方法二*/set @b='123;234;567;789'; CREATE TEMPORARY TABLE splittable( id INT AUTO_INCREMENT primary key, VALUE VARCHAR(20) ) ; set @sql=concat(concat("insert into splittable(value) values ('",replace(@b,';',"'),('")),"')"); prepare stem from @sql;execute stem; select * from splittable; bitsCN.com

人气教程排行