回答:
これはあなたが探しているものかもしれません:
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
または
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
2番目の例では構文をテストしていません。それが100%機能するかどうかはわかりませんが、多少の調整が必要になる場合がありますが、目的の出力を取得する方法の一般的な考え方を伝えています。
編集
コメントに記載されている懸念事項に対処するには...
@ pkr298-はいSTRは数値でのみ機能します... OPのフィールドはIDです...したがって、数値のみです。
@Desolator-もちろん、これは機能しません...最初のパラメーターは6文字です。次のようなことができます:
SELECT REPLACE(STR(id,
(SELECT LEN(MAX(id)) + 4 FROM tableA)), SPACE(1), '0') AS [padded_id] FROM tableA
これは理論的にはゴールポストを移動するはずです...数値が大きくなると、常に機能するはずです... 1か123456789かに関係なく...
したがって、最大値が123456の場合... 0000123456が表示され、最小値が1の場合、0000000001が表示されます
SQL Serverは、バージョン2012以降、FORMAT関数をサポートするようになりました。
SELECT FORMAT(id, '0000') FROM TableA
トリックを行います。
IDまたは列が内にありvarchar
、最初に変換する数値を表す場合:
SELECT FORMAT(CONVERT(INT,id), '0000') FROM TableA
declare @T table(id int)
insert into @T values
(1),
(2),
(12),
(123),
(1234)
select right('0000'+convert(varchar(4), id), 4)
from @T
結果
----
0001
0002
0012
0123
1234
古い投稿ですが、これは誰かを助けるかもしれません:
空白以外の4文字で終わるまで完了するには:
SELECT RIGHT ('0000'+COLUMNNAME, 4) FROM TABLENAME;
10まで完了するには:
SELECT RIGHT ('0000000000'+COLUMNNAME, 10) FROM TABLENAME;
列がnumericの場合は、まず次のコードでvarcharに変換します。
Select RIGHT('0000'+Convert(nvarchar(20), COLUMNNAME), 4)
From TABLENAME
数値フィールドで10まで完了するには:
SELECT RIGHT ('0000000000'+Convert(nvarchar(20), COLUMNNAME), 10) FROM TABLENAME;
-これらを調べてください。
select FORMAT(1, 'd4');
select FORMAT(2, 'd4');
select FORMAT(12, 'd4');
select FORMAT(123, 'd4');
select FORMAT(1234, 'd4');
-これらがお役に立てば幸いです
これは文字列、整数、数値で機能します。
SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)
4
希望の長さはどこですか。4桁を超える数値に対して機能し、値に空の文字列を返しNULL
ます。
まだ興味がある場合は、DATABASE.GUIDE:SQL Serverの左パディング– 3 LPAD()と同等のこの記事を見つけました。
つまり、その記事で言及されている3つの方法があります。
id = 12で、0012として表示する必要があるとします。
方法1 – RIGHT()関数を
使用する最初の方法は、RIGHT()関数を使用して、先行ゼロを追加した後、文字列の右端の部分のみを返します。
SELECT RIGHT('00' + '12', 4);
結果:
0012
方法2 – RIGHT()とREPLICATE()の組み合わせを使用する
この方法は前の方法とほとんど同じですが、唯一の違いは、3つのゼロをREPLICATE()関数で置き換えるだけです。
SELECT RIGHT(REPLICATE('0', 2) + '12', 4);
結果:
0012
方法3 – REPLACE()とSTR()の組み合わせを使用する
この方法は、前の方法とはまったく異なる角度から来ています。
SELECT REPLACE(STR('12', 4),' ','0');
結果:
0012
記事をチェックしてください。例を使った詳細な分析があります。
私はこれをSQLサーバーの関数で必要とし、パトリックの答えを少し調整しました。
declare @dossierId int = 123
declare @padded_id varchar(7)
set @padded_id = REPLACE(
SPACE(7 - LEN(@dossierId)) + convert(varchar(7), @dossierId),
SPACE(1),
'0')
SELECT @dossierId as '@dossierId'
,SPACE(LEN(@dossierId)) + convert(varchar(7)
,@dossierId) as withSpaces
,@padded_id as '@padded_id'
関数の作成:
Create FUNCTION [dbo].[PadLeft]
(
@Text NVARCHAR(MAX) ,
@Replace NVARCHAR(MAX) ,
@Len INT
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @var NVARCHAR(MAX)
SELECT @var = ISNULL(LTRIM(RTRIM(@Text)) , '')
RETURN RIGHT(REPLICATE(@Replace,@Len)+ @var, @Len)
END
例:
Select dbo.PadLeft('123456','0',8)
SELECT @var = LTRIM(RTRIM(@Text))
私の解決策は効率的ではありませんが、値(銀行小切手番号と電信送金の参照番号)がvarcharとして格納され、一部のエントリに英数字の値が含まれていて、長さが6文字未満の場合はパディングする必要があった状況で役に立ちました。
誰かが同じ状況に遭遇した場合に共有すると考えました
declare @minlen int = 6
declare @str varchar(20)
set @str = '123'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 000123
set @str = '1234'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 001234
set @str = '123456'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 123456
set @str = '123456789'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 123456789
set @str = '123456789'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: 123456789
set @str = 'NEFT 123456789'
select case when len(@str) < @minlen then REPLICATE('0',@minlen-len(@str))+@str else @str end
--Ans: NEFT 123456789
簡単な例は
DECLARE @number INTEGER
DECLARE @length INTEGER
DECLARE @char NVARCHAR(10)
SET @number = 1
SET @length = 5
SET @char = '0'
SELECT FORMAT(@number, replicate(@char, @length))