关闭

A SQL Function which used to split string by char

587人阅读 评论(0) 收藏 举报
IF exists (SELECT * from dbo.sysobjects where id = object_id(N'[dbo].[fnSplitByDelim]'and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[fnSplitByDelim]
GO

/****** Object:  UserDefinedFunction [dbo].[fnSplitByDelim]    Script Date: 05/25/2006 20:22:20 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[fnSplitByDelim]
(
    
@SourceString VARCHAR(max),
    
@Delim CHAR(1)
)
RETURNS @Result TABLE(SplittedValue varchar(255), Ident INT IDENTITY not null)
BEGIN

-- ============================================================================================ --
--
                                      FinTool                                                    --
--
 ============================================================================================ --

/***********************************************************************************
** Desc:    Function used to return the values from string with seperator
**            
**            
**            
**
**
** Note:    
**                
**
** Called By:    Stored Procedures
** 
**
** Author:   v-svarad
** Date:     Oct 1, 2006
************************************************************************************
** Change History
************************************************************************************
** Date         Author     Description
** ----------   ---------  ----------------------------------------------------------
** 10-01-2006    v-svarad   Created

**********************************************************************************
*/


    
DECLARE @Wordstart int@WordEND int@DoubleDelim varchar(2)
    
    
SET @Wordstart = 1
    
SET @WordEND = 1
    
SET @DoubleDelim = REPLICATE(@Delim2)

    
-- Prepare the data
    WHILE CHARINDEX(@DoubleDelim@SourceString> 0
        
SET @SourceString = REPLACE(@SourceString@DoubleDelim@Delim)
    
-- Left-trim it
    IF left(@SourceString1= @Delim
    
BEGIN
        
IF @Delim = ' '
            
SET @SourceString = LTRIM(@SourceString)
        
ELSE
            
SET @SourceString = SUBSTRING(
                
@SourceString,
                
PATINDEX('%[^' + @Delim + ']%'@SourceString),
                
LEN(@SourceString- PATINDEX('%[^' + @Delim + ']%'@SourceString+ 1)
    
END
    
-- Right-pad it
    IF right(@SourceString1<> @Delim
        
SET @SourceString = @SourceString + @Delim

    
WHILE @Wordstart > 0
    
BEGIN
        
-- Extract the next word
        SET @WordEND = CHARINDEX(@Delim@SourceString@Wordstart)
        
IF @WordEND > @WordStart
        
BEGIN
            
IF LEN(LTRIM(RTRIM(SUBSTRING(@SourceString@Wordstart@WordEND - @Wordstart)))) > 0
                
INSERT into @Result SELECT SUBSTRING(@SourceString@Wordstart@WordEND - @Wordstart)
            
SET @Wordstart = @WordEND + 1
        
END
        
ELSE SET @Wordstart = 0 -- Terminate the loop
    END

RETURN 
END
GO

GRANT SELECT ON DBO.[fnSplitByDelim] TO PUBLIC
GO
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:336835次
    • 积分:5869
    • 等级:
    • 排名:第4524名
    • 原创:248篇
    • 转载:19篇
    • 译文:0篇
    • 评论:38条
    最新评论