String.Format like functionality in T-SQL?

后端 未结 13 1940
滥情空心
滥情空心 2020-12-02 12:54

I\'m looking for a built-in function/extended function in T-SQL for string manipulation similar to the String.Format method in .NET.

13条回答
  •  無奈伤痛
    2020-12-02 13:20

    One more idea.

    Although this is not a universal solution - it is simple and works, at least for me :)

    For one placeholder {0}:

    create function dbo.Format1
    (
        @String  nvarchar(4000),
        @Param0  sql_variant
    )
    returns nvarchar(4000)
    as
    begin
        declare @Null nvarchar(4) = N'NULL';
    
        return replace(@String, N'{0}', cast(isnull(@Param0, @Null) as nvarchar(4000)));    
    end
    

    For two placeholders {0} and {1}:

    create function dbo.Format2
    (
        @String  nvarchar(4000),
        @Param0  sql_variant,
        @Param1  sql_variant
    )
    returns nvarchar(4000)
    as
    begin
        declare @Null nvarchar(4) = N'NULL';
    
        set @String = replace(@String, N'{0}', cast(isnull(@Param0, @Null) as nvarchar(4000)));
           return     replace(@String, N'{1}', cast(isnull(@Param1, @Null) as nvarchar(4000))); 
    end
    

    For three placeholders {0}, {1} and {2}:

    create function dbo.Format3
    (
        @String  nvarchar(4000),
        @Param0  sql_variant,
        @Param1  sql_variant,
        @Param2  sql_variant
    )
    returns nvarchar(4000)
    as
    begin
        declare @Null nvarchar(4) = N'NULL';
    
        set @String = replace(@String, N'{0}', cast(isnull(@Param0, @Null) as nvarchar(4000)));
        set @String = replace(@String, N'{1}', cast(isnull(@Param1, @Null) as nvarchar(4000))); 
           return     replace(@String, N'{2}', cast(isnull(@Param2, @Null) as nvarchar(4000)));
    end
    

    and so on...

    Such an approach allows us to use these functions in SELECT statement and with parameters of nvarchar, number, bit and datetime datatypes.

    For example:

    declare @Param0 nvarchar(10) = N'IPSUM' ,
            @Param1 int          = 1234567  ,
            @Param2 datetime2(0) = getdate();
    
    select dbo.Format3(N'Lorem {0} dolor, {1} elit at {2}', @Param0, @Param1, @Param2);  
    

提交回复
热议问题