欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

程序员文章站 2022-06-06 23:06:54
...
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
相关标签: 分割 字符串