3 回答
TA贡献2016条经验 获得超9个赞
SELECT RIGHT('000'+ISNULL(field,''),3)
SELECT RIGHT('000'+CAST(field AS VARCHAR(3)),3)
正如问题所要求的那样,这个答案只有在长度<=3时才有效,如果您想要更大的值,则需要将字符串常量和两个整数常量更改为所需的宽度。艾格 '0000' and VARCHAR(4)),4
TA贡献1886条经验 获得超2个赞
DECLARE @myInt INT = 1;-- One way using a standard numeric format stringPRINT FORMAT(@myInt,'D3');-- Other way using a custom numeric format stringPRINT FORMAT(@myInt,'00#');
001 001
TA贡献1772条经验 获得超8个赞
下面是一种更通用的技术,用于向左填充到任何需要的宽度:
declare @x int = 123 -- value to be padded
declare @width int = 25 -- desired width
declare @pad char(1) = '0' -- pad character
select right_justified = replicate(
@pad ,
@width-len(convert(varchar(100),@x))
)
+ convert(varchar(100),@x)
但是,如果您处理的是负值,并填充前导零,则这和其他建议的技术都不起作用。你会得到这样的东西:
00-123
[可能不是你想要的]
所以…您必须跳过一些额外的循环,这里有一种方法可以正确地格式化负数:
declare @x float = -1.234
declare @width int = 20
declare @pad char(1) = '0'
select right_justified = stuff(
convert(varchar(99),@x) , -- source string (converted from numeric value)
case when @x < 0 then 2 else 1 end , -- insert position
0 , -- count of characters to remove from source string
replicate(@pad,@width-len(convert(varchar(99),@x)) ) -- text to be inserted
)
应该注意到,convert()调用应指定[n]varchar具有足够的长度来保持转换结果的截断。
添加回答
举报