2016-04-29 49 views
4

我在我的sql表中有一列。我想知道如何在我的列的值小於10時將前導零添加到列中?因此,例如:如何在數字小於10時添加前導零?

number result 
1  -> 01 
2  -> 02 
3  -> 03 
4  -> 04 
10 -> 10 
+1

一般來說,你應該在表示層做這個格式,而不是在數據庫層。 – RichardCL

+0

如果值大於100或1000,結果如何? –

回答

8
format(number,'00') 

版本> = 2012

+0

這是一個更優雅的解決方案,它處理負數 – RichardCL

8

您可以使用RIGHT

SELECT RIGHT('0' + CAST(Number AS VARCHAR(2)), 2) FROM tbl 

對於Number s的長度> 2,您使用CASE表達:

SELECT 
    CASE 
     WHEN Number BETWEEN 0 AND 99 
      THEN RIGHT('0' + CAST(Number AS VARCHAR(2)), 2) 
     ELSE 
      CAST(Number AS VARCHAR(10)) 
    END 
FROM tbl 
+0

謝謝,這很完美 – RedRocket

+1

@DragonBorn,這個解決方案效果很好,但請注意,在任何情況下,2位數以上的數字都會被剪切爲2位數。可能導致奇怪的錯誤... – Shnugo

2

Felix的解決方案是偉大的,除非你在你的表格有100以上的數字,在這種情況下,嘗試使用一個case語句來代替:

Select case when Number between 1 and 9 
    then '0' else '' end + cast(number as varchar(3)) 
+0

感謝您的幫助,我也會嘗試 – RedRocket

1

另一種方法,

select case when number <10 then replicate('0',1)+cast(number as varchar) 
else cast(number as varchar) end 
+0

爲什麼使用REPLICATE?爲什麼不只是「0」? –

+0

偉大@FelixPamittan,你是對的。如果我們必須重複只有一個0然後複製將不會使用,但incase當0將重複,然後罰款。我只是想顯示不同的方法,它也會幫助其他用戶。 – KumarHarsh

1

而且還多了一個解決方案:

SELECT REPLACE(STR(@YourNumber,2),' ','0'); 

我喜歡這一點,因爲其他的方法可能導致數的情況下,隨機成果,這是超過您指定的數字的計數寬:

但它不會是負面的數字處理...

DECLARE @YourNumber INT=123; 
SELECT REPLACE(STR(@YourNumber,5),' ', '0') --pad to five digits 
     ,REPLACE(STR(@YourNumber,3),' ', '0') --pad to 3 digits 
     ,REPLACE(STR(@YourNumber,2),' ', '0'); --123 is wider than 2 digits... 

結果

0
123 
** 
相關問題