把以特定字符分隔的字符串分割,并把结果保存到表中

/****** Object:  UserDefinedFunction [dbo].[FSysSplit]    Script Date: 06/28/2011 09:04:51 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO





ALTER FUNCTION [dbo].[FSysSplit](@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)=0 AND @Long_str <> '')

    BEGIN

		INSERT INTO @tmp (short_str) VALUES (@Long_str)

		RETURN

    END

 

    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





你可能感兴趣的:(字符串)