SqlServer中字串拆分仿造split功能

龐順龍發表於2019-05-11

SqlServer中字串拆分仿造split功能

函式如下:

 
CREATE function [SplitString]
(
	
    @Input nvarchar(max),         --要進行擷取拆分的字串/欄位   
    @Separator nvarchar(max)=',', --拆分規則
    @RemoveEmptyEntries bit=1 )   --是否移除空字元,1移除 0保留
returns @TABLE table 
(
    [Id] int identity(1,1),
    [Value] nvarchar(max)
) 
as
begin 
    declare 
    @Index int, 
    @Entry nvarchar(max)
    set @Index = charindex(@Separator,@Input)

    while (@Index>0)
    begin
        set @Entry=ltrim(rtrim(substring(@Input, 1, @Index-1)))
        
        if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
            begin
                insert into @TABLE([Value]) Values(@Entry)
            end

        set @Input = substring(@Input, @Index+datalength(@Separator)/2, len(@Input))
        set @Index = charindex(@Separator, @Input)
    end
    
    set @Entry=ltrim(rtrim(@Input))
    if (@RemoveEmptyEntries=0) or (@RemoveEmptyEntries=1 and @Entry<>'')
        begin
            insert into @TABLE([Value]) Values(@Entry)
        end

    return
END

測試:


--測試函式
declare 
	@str1 varchar(max), 
	@str2 varchar(max), 
	@str3 varchar(max)

	set @str1 = '1,2,3'
	set @str2 = '1#2#3'
	set @str3 = '1#2#3#'

select [Value] from [dbo].[SplitString](@str1, ',', 1) -- 按 , 拆分,去除空字元
select [Value] from [dbo].[SplitString](@str2, '#', 1) -- 按 # 拆分,去除空字元
select [Value] from [dbo].[SplitString](@str3, '#', 0) -- 按 # 拆分,保留空字元
測試結果如下:


參考:http://www.cnblogs.com/yangyy753/archive/2011/11/23/2260618.html

內容均為作者獨立觀點,不代表八零IT人立場,如涉及侵權,請及時告知。

相關文章