sql server实现的自定义Split函数

发布时间:2020-10-02编辑:脚本学堂
写sql程序时,需要拆分字符串。在vb中提供有这样的函数,在其他的语言的类库中的string对象也提供有拆分一个字符串到数组中的split函数。或许因为sql没有数组类型,因此没有创建这样的字符串处理函数。

写sql程序时,需要拆分字符串。在vb中提供有这样的函数,在其他的语言的类库中的string对象也提供有拆分一个字符串到数组中的split函数。
或许因为sql没有数组类型,因此没有创建这样的字符串处理函数。  

  
sql没有数组类型,但是可以相似的有table类型数值。
自己写了一个自定义的split函数,以解决目前遇到的问题。
设计思路:函数输入值为一个字符类型(varchar之类的)的参数,返回一个table类型的结果。 
  
定义如下: 
1,参数定义和说明 
输出参数:@splitString   varchar(8000)   --   需要Split的字符串 
                      @separate   varchar(10)     ---分隔符 
返回:@returnTable   table(col_Value   varchar(20))     --单个字符长度可以按照需要修改 
  
2,函数体 
 

复制代码 代码如下:

CREATE   FUNCTION   SplitStr   (@splitString   varchar(8000),   @separate   varchar(10)) 
RETURNS   @returnTable   table(col_Value   varchar(20)) 
AS 
  
BEGIN 
  declare   @thisSplitStr   varchar(20) 
  declare   @thisSepIndex   int 
  declare   @lastSepIndex   int 

  set   @lastSepIndex   =   0 

  if   Right(@splitString   ,len(@separate))   <>   @separate   set   @splitString   =   @splitString   +   @separate 
  set   @thisSepIndex   =   CharIndex(@separate,@splitString   ,@lastSepIndex) 
  
  while   @lastSepIndex   <=   @thisSepIndex 
  begin 
                    set   @thisSplitStr   =   SubString(@splitString   ,@lastSepIndex,@thisSepIndex-@lastSepIndex) 
                    set   @lastSepIndex   =   @thisSepIndex   +   1 
                    set   @thisSepIndex   =   CharIndex(@separate,@splitString   ,@lastSepIndex) 
                    insert   into   @returnTable   values(@thisSplitStr) 
  end 
  return 
  END
 

    
使用实例:
 

复制代码 代码如下:
select   *   from   SplitStr(‘123,456,789’,’,’) 


结果: 
col_value 
------------------------------------------ 
123 
456 
789