カスタム数値書式でTINYINTをVARCHARに変換する方法はありますか? たとえば、私のTINYINTは3の値を持ち、03のVARCHに変換したいので、常に2桁の数字を表示します。フォーマットを使用して数値をSQLでvarcharに変換する
この機能はCONVERT機能では表示されません。
カスタム数値書式でTINYINTをVARCHARに変換する方法はありますか? たとえば、私のTINYINTは3の値を持ち、03のVARCHに変換したいので、常に2桁の数字を表示します。フォーマットを使用して数値をSQLでvarcharに変換する
この機能はCONVERT機能では表示されません。
RIGHT('00' + CONVERT(VARCHAR, MyNumber), 2)
この数字が99を超えてしまうことに注意してください。その可能性を考慮する必要があります。
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など
右機能を使用してください...
DECLARE @testnum TINYINT
SET @testnum = 3
PRINT RIGHT('00' + CONVERT(VARCHAR(2), @testnum), 2)
あなたはこの
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
値の範囲は何を試すことができますか?それは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に変更するだけです。
Correción:3-LEN
declare @t TINYINT
set @t =233
SELECT ISNULL(REPLICATE('0',3-LEN(@t)),'') + CAST(@t AS VARCHAR)
はここでこれは、任意の数の上で動作するとstr()
機能の長さを変えることによって、あなたはどのように多くの規定ができ、最後の答え
declare @t tinyint,@v tinyint
set @t=23
set @v=232
Select replace(str(@t,4),' ','0'),replace(str(@t,5),' ','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の代わりに実際の#を入れなければなりません。
ようこそスタックオーバーフロー。この質問は、もともと、ほぼ3年前に回答されました。古い質問に新しい回答を追加するときには、あなたの答えについての斬新さや、元の回答が正確でない理由(または、おそらくもっと正確ではない可能性が高い)を詳細に説明することは良い考えです製品が変更されたため)。また、「訂正」が訂正していることは私には分かりません。それも明確にするべきです。 –