我想将0添加到数字
DECLARE @AccPD Char(6)
DECLARE @PostMT Char(2)
SELECT @accpd ='201102'
select @PostMT = case when substring(@accpd,5,2) = '01'
then substring(@accpd,5,2) + 11
else CAST('00' AS Char(2)) + substring(@accpd,5,2)-1
end
SELECT @PostMT
这应该返回值01而不是1
答案 0 :(得分:4)
DECLARE @Number INT
SET @Number = 9
Select '0' + CAST(@Number as VarChar(30))
输出'09'
我会提供更具体的帮助,但对于我的生活,我无法真正理解你在这里想要达到的目标。
另外,如果你只想填充一个Int并返回一个字符串,那么这是一个函数:
/*
Usage:
select dbo.fn_PadInt(3, '0', 5)
Returns '00003'
*/
CREATE FUNCTION fn_PadInt
(
@Input Int,
@PadCharacter Char(1),
@Length Int
)
RETURNS VarChar(20)
AS
BEGIN
DECLARE @InputLen INT
DECLARE @Output VarChar(20)
SET @InputLen = LEN(@Input)
SET @Output = CAST(@Input as VarChar(20))
WHILE @InputLen < @Length
BEGIN
SET @Output = @PadCharacter + @Output
SET @InputLen = @InputLen + 1
END
Return @Output
END
答案 1 :(得分:1)
DECLARE @AccPD Char(6)
DECLARE @PostMT Char(2)
SELECT @accpd ='201102'
select @PostMT = case when substring(@accpd,5,2) = '01'
then right(substring(@accpd,5,2) + 11, 2)
else right(100 + substring(@accpd,5,2)-1, 2)
end
SELECT @PostMT
问题是当你使用
时 then substring(@accpd,5,2) + 11
在CASE语句的第一个分支中,+ 11产生INT结果,这也强制第二个分支成为INT结果(1)。当[INT]结果随后被赋值给变量@PostMT Char(2)时,就在那时INT(1)被转换为“1”(注意由于固定宽度char2的空间)
答案 2 :(得分:1)
左侧填充通常使用REPLICATE
DECLARE @AccPD Char(6)
DECLARE @PostMT Char(2)
SELECT @accpd ='201102'
select @PostMT = case when substring(@accpd,5,2) = '01'
then substring(@accpd,5,2) + 11
else substring(@accpd,5,2)-1
end
SET @PostMT = REPLICATE('0', 2 - LEN(@PostMT)) + @PostMT
SELECT @PostMT