A SQL Function which used to split string by char

来源:互联网 发布:java基础作业题 编辑:程序博客网 时间:2024/05/17 07:08
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
 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 门破了个洞怎么办 钢圈轮毂刮花了怎么办 瓷砖用刀子划了怎么办 陶瓷洗手台裂了怎么办 洗车泵水管坏了怎么办 印胶浆里面渗入了发泡浆怎么办? 管子断在水管里怎么办 衣服上的织带缩水怎么办 真丝衣服拔缝了怎么办 顾客说衣服太花怎么办 铝和碱反应变黑怎么办 40度高温多肉怎么办 沾到医用蓝药水怎么办? 裤子弄上泡沫胶怎么办 苍蝇纸粘衣服上怎么办 苍蝇胶沾衣服上怎么办 灯带为什么不亮怎么办 苹果6比屏幕变黄怎么办 雷腾键盘锁了怎么办 自吸泵电机不转怎么办 孕38周胎儿偏小怎么办 被火烧黑的铁怎么办 锅被烟熏黑了怎么办 墙壁被烟熏黑了怎么办 壁纸被烟熏黑了怎么办 空调被烟熏黑了怎么办 牙被烟熏黑了怎么办 尖头鞋把尖折了怎么办 腰椎固定手术钢钉断了怎么办 脚被钢钉扎了怎么办 皮帘子有胶了怎么办 12v插口没有电怎么办 吃了一颗聚乙烯醇怎么办 立式注塑机产品粘膜怎么办 被小松鼠咬了怎么办 被宠物松鼠咬了怎么办 手被松鼠咬出血怎么办 银联认证码失败怎么办 国际汇款触发合规查询怎么办 外面的网线断了怎么办 网线被别的车挂断了怎么办