热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

MySQL字符串分割自定义函数

/***方法一*/select*fromdbo.split(’01__02__03’,’__’)发生错误,返回的结果不是我们原本要的结果:www.2cto.com---------------------想要的结果010

/**
*方法一
*/
select * from dbo.split(’01__02__03’,’__’)
 
  发生错误,返回的结果不是我们原本要的结果:
    www.2cto.com  
  -------------------
  --想要的结果
 
  01
 
  02
 
  03
  -----------------
    www.2cto.com  
  --实际结果:
 
  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   www.2cto.com  
  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   www.2cto.com  
  ngX,1) 
  END 
  IF(@StringX<>’’) INSERT INTO @TableResult SELECT @StringX 
  RETURN 
  END
 
/**
*方法二
*/
set @b=&#39;123;234;567;789&#39;; 
 
CREATE TEMPORARY TABLE splittable(
        id INT AUTO_INCREMENT primary key,
        VALUE VARCHAR(20)
    ) ;  www.2cto.com  
 
set @sql=concat(concat("insert into splittable(value) values (&#39;",replace(@b,&#39;;&#39;,"&#39;),(&#39;")),"&#39;)"); 
 
prepare stem from @sql;
execute stem;
 
select * from splittable;

推荐阅读
author-avatar
手机用户2602891283
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有