【问题标题】:After concat text i get NULL在 concat text 我得到 NULL
【发布时间】:2020-05-28 11:41:11
【问题描述】:

我尝试 concat 2 字符串并将其反转,但结果我得到 NULL 而不是文本 例如。第一个字符串“a1” 第二个字符串“b2” 结果“21ba”

CREATE function addToString(@val1 varchar(100),@val2 varchar(100))
returns varchar(200)
as
begin
    declare @i as int
    declare @output as varchar(200)
    if len(@val1)!=len(@val2)
        set @output='length error: '+cast(len(@val1) as varchar(10))+
        '<>'+cast(len(@val2) as varchar(10)) 
    else
        select @i=len(@val1)-1
        while @i>=0
            begin
                set @output= concat(@output,substring(@val2,@i,1))
                set @output= concat(@output,substring(@val1,@i,1))  
                set @i=@i-1
            end
    return @output
end
go
select dbo.[addToString]('a1','b2') as txt

【问题讨论】:

  • 用您正在使用的数据库(可能是 SQL Server)标记您的问题。您还应该解释代码应该做什么并提供示例数据和所需的结果。

标签: sql sql-server concatenation varchar


【解决方案1】:

您需要处理NULL 值。可能最简单的方法是在存储过程的顶部用一个空字符串替换它:

select @val2 = coalesce(@val2, '');

或者,将参数声明为NOT NULL,这样NULL的值就不会被传入。

【讨论】:

  • @OVDC 。 . .或者先放弃程序。无论哪种方式。
【解决方案2】:

你的逻辑是错误的,你没有初始化@output:

CREATE function addToString(@val1 varchar(100),@val2 varchar(100))
returns varchar(200)
as
begin
    declare @i as int

 -- declare @output as varchar(200) -- initialized to NULL
    declare @output as varchar(200) = ''

    if len(@val1)!=len(@val2)
        set @output='length error: '+cast(len(@val1) as varchar(10))+
        '<>'+cast(len(@val2) as varchar(10)) 
    else
     -- select @i=len(@val1)-1 -- strips the last char
        select @i=len(@val1)

     -- while @i>=0
        while @i>0

            begin
                set @output= concat(@output,substring(@val2,@i,1))
                set @output= concat(@output,substring(@val1,@i,1))  
                set @i=@i-1
            end
    return @output
end
;

【讨论】:

    【解决方案3】:

    从 len 函数中删除 -1

      CREATE function addToString(@val1 varchar(100),@val2 varchar(100))
        returns varchar(200)
        as
        begin
            declare @i as int
            declare @output as varchar(200)
            if len(@val1)!=len(@val2)
                set @output='length error: '+cast(len(@val1) as varchar(10))+
                '<>'+cast(len(@val2) as varchar(10)) 
            else
                select @i=len(@val1)
                while @i>=0
                    begin
                        set @output= concat(@output,substring(@val2,@i,1))
                        set @output= concat(@output,substring(@val1,@i,1))  
                        set @i=@i-1
                    end
            return @output
        end
        go
        select dbo.[addToString]('a1','b2') as txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      相关资源
      最近更新 更多