sqlserver中好像没有分割字符串的函数,G哥告诉我,可以自定义,以下内容为抄袭,做个笔记。
第一个是根据下标返回分割结果集中的一个:

--用法:dbo.split(‘要分割的字符串’,’分隔字符’,返回结果集中第几个)
--如果没有分隔的字符(第二个参数),则返回整个“要分割的字符串”。
--如果取出的位置超出结果集的下标则返回空。
 
CREATE FUNCTION [dbo].[split]
 (@str nvarchar(4000),@code varchar(10),@no int )  
RETURNS varchar(200)
AS  
BEGIN 
 
declare @intLen int
declare @count int
declare @indexb  int
declare @indexe  int
SET @intLen=len(@code)
SET @count=0
SET @indexb=1
 
IF @no=0
  IF charindex(@code,@str,@indexb)<>0
     RETURN LEFT(@str,charindex(@code,@str,@indexb)-1) 
  else
     RETURN @str
 
while charindex(@code,@str,@indexb)<>0
  begin
       SET @count=@count+1
       IF @count=@no
         break
       SET @indexb=@intLen+charindex(@code,@str,@indexb)
  end 
 
IF @count=@no
  begin
 
     SET @indexe=@intLen+charindex(@code,@str,@indexb)
	IF charindex(@code,@str,@indexe)<>0
	    RETURN substring(@str,
	    charindex(@code,@str,@indexb)+len(@code),
	    charindex(@code,@str,@indexe)-charindex(@code,@str,@indexb)-len(@code))
	else 
	    RETURN RIGHT(@str,len(@str)-charindex(@code,@str,@indexb)-len(@code)+1)
 
  end
 
RETURN ''
 
END

第二个是返回分割后的结果集:

--支持分割符多字节 
--使用方法  
--select * from dbo.split('abc-def-ghi-jkl','-')    
--select * from dbo.split('abc----def----ghi----jkl','----')    
 
ALTER FUNCTION [dbo].[split](@Long_str varchar(8000),@split_str varchar(100))    
RETURNS  @tmp TABLE(        
    ID int IDENTITY PRIMARY KEY,      
    short_str varchar(8000)    
)    
AS   
BEGIN   
    DECLARE @long_str_Tmp varchar(8000),
			@short_str varchar(8000),
			@split_str_length int   
 
    SET @split_str_length = LEN(@split_str)    
 
    IF CHARINDEX(@split_str,@Long_str)=1 
         SET @long_str_Tmp=SUBSTRING(@Long_str,
					@split_str_length+1,
					LEN(@Long_str)-@split_str_length)
 
    ELSE
         SET @long_str_Tmp=@Long_str
 
    IF CHARINDEX(REVERSE(@split_str),REVERSE(@long_str_Tmp))>1    
        SET @long_str_Tmp=@long_str_Tmp+@split_str    
    ELSE   
        SET @long_str_Tmp=@long_str_Tmp    
 
    WHILE CHARINDEX(@split_str,@long_str_Tmp)>0    
        BEGIN   
            SET @short_str=SUBSTRING(@long_str_Tmp,1,
					CHARINDEX(@split_str,@long_str_Tmp)-1)    
            DECLARE @long_str_Tmp_LEN INT,@split_str_Position_END int   
            SET @long_str_Tmp_LEN = LEN(@long_str_Tmp)    
            SET @split_str_Position_END = LEN(@short_str)+@split_str_length    
            SET @long_str_Tmp=REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),1,
					@long_str_Tmp_LEN-@split_str_Position_END))
            IF @short_str<>'' INSERT INTO @tmp SELECT @short_str    
        END   
    RETURN     
END