无法使用STUFF在末尾添加字符串

时间:2014-08-12 06:32:22

标签: sql-server

我尝试使用STUFF在另一个字符串中插入字符串。

DECLARE @Number VARCHAR(100) = '12345'

SELECT  STUFF(@Number, 3, 0, '6') -- Add value in 3rd Position, Returns '126345'

我试图将值附加到最后

SELECT  STUFF(@Number, 6, 0, '6') -- Add value in 6th Position
-- Actual length is 5, So it Returns 'NULL'

预期输出:

123456

我尝试使用STUFF进行简单陈述。但无法在最后添加字符串。任何人都可以用其他任何简单的方式帮助我吗?

3 个答案:

答案 0 :(得分:2)

来自here

  

第二个参数是一个整数值,用于指定位置   开始删除和插入。如果start或length为负数,则为null   返回字符串。 如果开始时间比第一次更长   character_expression,返回一个空字符串。 start可以是type   BIGINT。

此查询:

DECLARE @Number VARCHAR(100) = '12345'
SELECT  STUFF(@Number, 6, 0, '6')

返回NULL,因为只有5个字符。

如果你想在最后添加字符串,只需使用+运算符连接该字符串。

DECLARE @Number VARCHAR(100) = '12345'
SELECT @Number + '6'

答案 1 :(得分:1)

您可以使用CONCAT依次追加字符串。它们将按照传递给函数的顺序附加:

DECLARE @Number VARCHAR(100) = '12345'
select concat(@Number,'6')

您也可以使用'+'运算符来实现此目的。但是,如果附加的字符串为NULL,则使用“+”结果也为NULL,而CONCAT将空字符串视为空字符串。

select concat(@Number,null,6) -- = '123456'
select @Number + null + 6 -- == null

如果要修复的位置未修复,您可以使用CASE语句以及STUFFCONCAT插入或附加到单个语句中,如下所示:< / p>

declare @number varchar(100) = '12345'
declare @pos int = 6
declare @append varchar(100) = '6'

select 
case 
     when @pos < len(@number) then stuff(@number,@pos,0,@append) 
     else concat(@number,@append) 
end result

答案 2 :(得分:1)

作为一个黑客你可以做到这一点,

SELECT  STUFF(@Number, 5, 1, '56')
相关问题