'field1-field2'として連結されたデータベースから2つのフィールドを返す必要があります。 2番目のフィールドはintですが、先頭に0がある固定長の5として返す必要があります。私が使用している方法は次のとおりです。SQLの先行0をintに追加する最も効率的な方法
SELECT Field1 + '-' + RIGHT('0000' + CAST(Field2 AS varchar),5) FROM ...
もっと効率的な方法がありますか?
'field1-field2'として連結されたデータベースから2つのフィールドを返す必要があります。 2番目のフィールドはintですが、先頭に0がある固定長の5として返す必要があります。私が使用している方法は次のとおりです。SQLの先行0をintに追加する最も効率的な方法
SELECT Field1 + '-' + RIGHT('0000' + CAST(Field2 AS varchar),5) FROM ...
もっと効率的な方法がありますか?
かなりの方法です:負ため
SELECT RIGHT('000000000' + CONVERT(VARCHAR(8),Num), 8) FROM #Numbers
:#Numbers
はテーブルでありNum
が列であるリンクを、クエリは次のようになり、次節約するために、そうAdding Leading Zeros To Integer Values
または正の値
declare @v varchar(6)
select @v = -5
SELECT case when @v < 0
then '-' else '' end + RIGHT('00000' + replace(@v,'-',''), 5)
私はこのようにします。
SELECT RIGHT(REPLICATE('0', 5) + CAST(Field2 AS VARCHAR(5),5)
必ずしもすべてが「より簡単」であるか、より効率的ですが、読みやすいとは限りません。
CREATE FUNCTION LEFTPAD
(@SourceString VARCHAR(MAX),
@FinalLength INT,
@PadChar CHAR(1))
RETURNS VARCHAR(MAX)
AS
BEGIN
RETURN
(SELECT Replicate(@PadChar, @FinalLength - Len(@SourceString)) + @SourceString)
END
の必要性を取り除くために最適化されることができます。
SELECT RIGHT(REPLACE(STR(@NUM),' ','0'),5)
(CASTまたはCONVERTなし)もう一つの方法:あなたが好きなものを使用することができ、データベース内の関数を持ちたい/余裕がある場合は、「RIGHT」
と答えていますが、代わりに['lpad'](https://www.w3schools.com/sql/func_mysql_lpad.asp)に関する情報を追加してください(str_replace(...)) – knb
優れたソリューション –
あなたがゼロの異なる数を追加することによって、最終的な結果では、全文字列の一貫性の数を取得したい場合は、ここで(VSQL用)少しの変更がある
SELECT CONCAT( '0'、9-length(TO_CHAR(var1)))、CAST(var1 AS VARCHAR(9)))をvar1とします。
必要に応じて9を置き換えることができます。
BRD
負の数値はどうですか? – MatBailie
これは変換のために数値を含む例外を生成します。キャストが必要です –
負または正の値を行うコードを追加しました – SQLMenace