一个对字符串进行分割,返回一个临时表的表函数实现(转)

1.表函数定义.

 

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[fnSplit]
    (
      @InputList VARCHAR(MAX) -- List of delimited items
      , @Delimiter VARCHAR(50) = '{,}' -- delimiter that separates items
      , @NeedTrim BIT = 1
      , @RemoveEmptyEntries BIT = 1
    )
RETURNS @List TABLE ( Item VARCHAR(MAX) )
BEGIN
    DECLARE @sItem VARCHAR(MAX)
    WHILE CHARINDEX(@Delimiter, @InputList, 0) <> 0
        BEGIN
            SELECT  @sItem = RTRIM(LTRIM(SUBSTRING(@InputList, 1,
                                                   CHARINDEX(@Delimiter, @InputList, 0)
                                                   - 1))),
                    @InputList = RTRIM(LTRIM(SUBSTRING(@InputList,
                                                       CHARINDEX(@Delimiter, @InputList, 0)
                                                       + LEN(@Delimiter),
                                                       LEN(@InputList))))
 
            IF LEN(@sItem) > 0
                BEGIN
                    IF @NeedTrim = 1
                        BEGIN
                            SET @sItem = LTRIM(RTRIM(@sItem))
                        END
                    IF @RemoveEmptyEntries <> 1
                        OR @sItem <> ''
                        BEGIN
                            INSERT  INTO @List
                                    SELECT  @sItem                       
                        END
                END     
        END

    IF LEN(@InputList) > 0
        INSERT  INTO @List
                SELECT  @InputList -- Put the last item in
    RETURN
END

 

GO

 

2.表函实现:

 

select * from dbo.fnSplit('123,456',',',0,0)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值