3 回答

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊
SELECT RIGHT('000'+ISNULL(field,''),3)
SELECT RIGHT('000'+CAST(field AS VARCHAR(3)),3)
正如問題所要求的那樣,這個(gè)答案只有在長度<=3時(shí)才有效,如果您想要更大的值,則需要將字符串常量和兩個(gè)整數(shù)常量更改為所需的寬度。艾格 '0000' and VARCHAR(4)),4

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊
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貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超8個(gè)贊
下面是一種更通用的技術(shù),用于向左填充到任何需要的寬度:
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)
但是,如果您處理的是負(fù)值,并填充前導(dǎo)零,則這和其他建議的技術(shù)都不起作用。你會(huì)得到這樣的東西:
00-123
[可能不是你想要的]
所以…您必須跳過一些額外的循環(huán),這里有一種方法可以正確地格式化負(fù)數(shù):
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
)
應(yīng)該注意到,convert()調(diào)用應(yīng)指定[n]varchar具有足夠的長度來保持轉(zhuǎn)換結(jié)果的截?cái)唷?/p>
添加回答
舉報(bào)