日期:2014-05-16  浏览次数:20720 次

MySQL字符串分割自定义函数

/**

*方法一

*/

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))?