2016-04-29 7 views
4

私は私のSQLテーブルに列があります。私の列の値が10未満のときに、先行ゼロをどのように追加することができますか?だから、例えば:numberが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を使用することができます。

長さ> 2と Number秒間
SELECT RIGHT('0' + CAST(Number AS VARCHAR(2)), 2) FROM tbl 

、あなたが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
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、あなたは正しいです。私たちは1つだけ0を繰り返す必要がありますが、複製は使用されませんが、0がその上で繰り返されるときに入れます。私はちょうど異なるアプローチを示したかったので、 – KumarHarsh

1

そして、まだもう一つの解決策を:あなたがあなたのテーブルに100以上の数字を持っていない限りフェリックスのソリューションは、その場合には、代わりにcase文を使用してみてください、素晴らしいです。

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

私は他のアプローチは、あなたが指定した桁数のカウントよりも広い数字の場合はランダムな結果をもたらす可能性があるとして、これを好む:

しかし、それはnegativ数字を扱っています...

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 
** 
関連する問題