SQL Server 2008で文字列を先頭に0で埋めて3文字にする: 他の方法
SQL Server 2008で文字列を先頭に0で埋めて3文字にする
SQL Server 2008では、RIGHT
関数とREPLICATE
関数を使用して文字列を先頭に0で埋めて3文字にすることができます。
方法:
RIGHT
関数: 文字列の右端から指定された文字数を取り出します。REPLICATE
関数: 指定された文字を指定された回数繰り返します。
例:
DECLARE @String VARCHAR(10) = '12';
SELECT RIGHT(REPLICATE('0', 3) + @String, 3);
解説:
REPLICATE('0', 3)
: '0'を3回繰り返して '000' を作成します。REPLICATE('0', 3) + @String
: '000' と '12' を連結して '00012' を作成します。RIGHT('00012', 3)
: '00012' の右端から3文字を取り出して '012' を取得します。
結果:
012
RIGHT関数とREPLICATE関数を使用する:
DECLARE @String VARCHAR(10) = '12';
SELECT RIGHT(REPLICATE('0', 3) + @String, 3);
FORMAT関数を使用する:
DECLARE @String VARCHAR(10) = '12';
SELECT FORMAT(@String, '000');
CONCAT関数とLEFT関数を使用する:
DECLARE @String VARCHAR(10) = '12';
SELECT CONCAT(LEFT('000', 3 - LEN(@String)), @String);
STUFF関数を使用する:
DECLARE @String VARCHAR(10) = '12';
SELECT STUFF(@String, 1, 0, REPLICATE('0', 3 - LEN(@String)));
CASE式を使用する:
DECLARE @String VARCHAR(10) = '12';
SELECT CASE WHEN LEN(@String) = 1 THEN '00' + @String
WHEN LEN(@String) = 2 THEN '0' + @String
ELSE @String END;
ユーザー定義関数を使用する:
CREATE FUNCTION PadLeftWithZeros(@String VARCHAR(MAX), @Length INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
RETURN RIGHT(REPLICATE('0', @Length) + @String, @Length);
END
SELECT dbo.PadLeftWithZeros('12', 3);
DECLARE @String VARCHAR(10) = '12';
SELECT REPLICATE('0', 3 - LEN(@String)) + @String;
DECLARE @String VARCHAR(10) = '12';
SELECT SUBSTRING(REPLICATE('0', 3) + @String, LEN(@String) + 1, 3);
DECLARE @String VARCHAR(10) = '12';
SELECT REPLICATE('0', CHARINDEX(@String, REPLICATE('0', 3) + @String) - 1) + @String;
DECLARE @String VARCHAR(10) = '12';
SELECT REPLICATE('0', PATINDEX('%[^0]%', REPLICATE('0', 3) + @String) - 1) + @String;
WHILEループを使用する:
DECLARE @String VARCHAR(10) = '12';
DECLARE @Length INT = 3;
WHILE LEN(@String) < @Length
BEGIN
SET @String = '0' + @String;
END
SELECT @String;
sql-server t-sql