2009-11-19 13 views

答えて

29
RIGHT('00' + CONVERT(VARCHAR, MyNumber), 2) 

この数字が99を超えてしまうことに注意してください。その可能性を考慮する必要があります。

1
declare @t tinyint 
set @t =3 
select right(replicate('0', 2) + cast(@t as varchar),2) 

同上:cripping効果の数字> 99

ためのあなたは1〜255に対応するためにしたいなら、あなたは

select right(replicate('0', 2) + cast(@t as varchar),3) 

しかし、これはあなたに001を与えるだろう、010を使用することができます100など

4

右機能を使用してください...

DECLARE @testnum TINYINT 
SET @testnum = 3 
PRINT RIGHT('00' + CONVERT(VARCHAR(2), @testnum), 2) 
4

あなたはこの

DECLARE @Table TABLE(
     Val INT 
) 

INSERT INTO @Table SELECT 3 
INSERT INTO @Table SELECT 30 

DECLARE @NumberPrefix INT 
SET @NumberPrefix = 2 
SELECT REPLICATE('0', @NumberPrefix - LEN(Val)) + CAST(Val AS VARCHAR(10)) 
FROM @Table 
2

値の範囲は何を試すことができますか?それは0から10ですか?もしそうなら、試してみてください。今すぐ

〜99 0〜9と同様に10を処理

SELECT REPLICATE('0',2-LEN(@t)) + CAST(@t AS VARCHAR) 

をあなたが255を通じて> 99を処理したい場合は、TINYINTは255の値まで行くことができます

declare @t TINYINT 
set @t =233 
SELECT ISNULL(REPLICATE('0',2-LEN(@t)),'') + CAST(@t AS VARCHAR) 

解決策を理解するために、+の左側の式は、文字列に接頭辞を付けるゼロの数を計算します。

値3の場合、長さは1です。2 - 1は1です。REPLICATEゼロを1つ追加します。 値10の場合、長さは2です。2 - 2は0です。REPLICATE何も追加しません。 値100の場合、長さは-1でNULLを生成します。ただし、null値は処理され、空の文字列に設定されます。

tinyintに最大255文字を含めることができ、フォーマットを3文字にしたい場合は、左の式で2-LENを3-LENに変更するだけです。

0

Correción:3-LEN

declare @t TINYINT 
set @t =233 
SELECT ISNULL(REPLICATE('0',3-LEN(@t)),'') + CAST(@t AS VARCHAR) 
+2

ようこそスタックオーバーフロー。この質問は、もともと、ほぼ3年前に回答されました。古い質問に新しい回答を追加するときには、あなたの答えについての斬新さや、元の回答が正確でない理由(または、おそらくもっと正確ではない可能性が高い)を詳細に説明することは良い考えです製品が変更されたため)。また、「訂正」が訂正していることは私には分かりません。それも明確にするべきです。 –

1

はここでこれは、任意の数の上で動作するとstr()機能の長さを変えることによって、あなたはどのように多くの規定ができ、最後の答え

declare @t tinyint,@v tinyint 
set @t=23 
set @v=232 
Select replace(str(@t,4),' ','0'),replace(str(@t,5),' ','0') 

を次の代替ですあなたが必要とする先行ゼロ。もちろん、文字列の長さは、あなたの数値型が保持できる最大桁数です。

0

郵便番号フィールドに同じ問題がありました。いくつかの人々は私にzipでExcelファイルを送ってきましたが、#でフォーマットされていました。あなたはちょうどあなたが望む結果を得るために@lenを変える...文字列としてだけでなく、彼らは< 5 LENた場合プリペンドは彼らに先頭の0をするためにそれらを変換するために

declare @int tinyint 
set  @int = 25 
declare @len tinyint 
set  @len = 3 

select right(replicate('0', @len) + cast(@int as varchar(255)), @len) 

を持っていました。フォーマットされたとして、あなたは...

001 
002 
... 
010 
011 
... 
255 

は、理想的には、 "VARCHAR(@len)"、あまりにも、それはSQLのコンパイルを吹くだろう取得します。 varの代わりに実際の#を入れなければなりません。

関連する問題