SQLでパディングを行う方法を紹介します。
パディングを行うと固定長のコード値を持つマスタテーブルのコードの桁数を左0埋めで合わせたり、特定の文字数に合わせるためにスペースで埋めたりすることができます。
目次
左0埋めした値を取得する
先ず、よく使う数値を指定した桁数になるまで左に0を埋める処理(ゼロパディング)を例にパディングを行う方法です。
左0埋めを行うには、次の3つの処理を行います。
- 0詰めを行う値(数値)を文字列に変換する
- 最大桁数(文字数)分の「0」繰り返した文字列を左に付ける
- 右から最大桁数(文字数)分を切り取る
0詰めを行う値(数値)を文字列に変換する
文字列への変換はCONVERT関数またはCAST関数を使用します。
数値を文字列に変換する例をCONVERT関数およびCAST関数を用いて行う例を以下に記載します。
1 2 3 4 |
-- CONVERT関数 SELECT CONVERT(NVARCHAR, 11) AS STR_VALUE; -- CAST関数 SELECT CAST(11 AS NVARCHAR) AS STR_VALUE; |
最大桁数(文字数)分の「0」繰り返した文字列を左に付ける
最大桁数(文字数)分の「0」繰り返した文字列を左に付けるのは簡単です。単純に「’00000’」という文字列を左に付けるだけです。
文字列に変換した11の左に「0」を5桁付ける例を以下に記載します。
1 2 |
-- 最大桁数(文字数)分の「0」を繰り返した文字列を左に付ける(5桁) SELECT '00000' + CONVERT(NVARCHAR, 11); |
上記の例ではCONVERT関数を使用していますがCAST関数を使用しても結果は同じです。
右から最大桁数(文字数)分を切り取る
右から最大桁数分の文字列を切り取るにはRIGHT関数を使用します。
最大桁数(文字数)分の「0」繰り返した文字列を左に付けた値を、右から5桁分切り取る例を以下に記載します。
1 2 |
-- 右から最大桁数分を切り取る SELECT RIGHT('00000' + CONVERT(NVARCHAR, 11), 5); |
0以外の文字を埋める
次に、左を半角スペースで埋める例です。
半角スペースでのパディングも0でパディングする場合とやり方は同じです。
以下に左に半角スペースを8桁埋める例を示します。
1 2 3 4 |
-- 数値の8桁左半角スペース埋め SELECT RIGHT(' ' + CONVERT(NVARCHAR, 22), 8); -- 文字列の8桁左半角スペース埋め SELECT RIGHT(' ' + 'xyz', 8); |
文字の繰り返し部分を関数にする
文字の繰り返しの部分(5桁左0埋めなら「’00000’」の部分)は関数を使用して指定することができます。
文字列の繰り返しにはREPLICATE関数を使います。
SQLServerのREPLICATE関数を使って5桁左0埋めをする例を以下に記載します。
1 2 |
-- REPLICATE関数を使って5桁左0埋め SELECT RIGHT(REPLICATE('0', 5) + CONVERT(NVARCHAR, 11), 5); |
実行結果は「’00000’」を左に付けた場合と同様に「00011」になります。
REPLICATE関数はSQLServerの関数なので、MySQLで行う場合にはREPLICATE関数の代わりにREPEAT関数を使います。
以下はMySQLでの取得例です。
1 2 |
-- REPEAT関数を使って5桁左0埋め SELECT RIGHT(REPEAT('0', 5) + CONVERT(NVARCHAR, 11), 5); |
SQLServerでFORMAT関数を使って左0埋めする
SQLServerで数値を左0埋めやする場合はFORMAT関数が使えます。
FORMAT関数の第1引数に数値を指定して、第2引数に書式を指定します。
以下に数値を5桁に左0埋めした文字列値を取得する例を記載します。
1 2 3 4 |
-- 1を左0埋めして「00001」にする SELECT FORMAT(1,'00000'); -- 15を左0埋めして「00015」にする SELECT FORMAT(15,'00000'); |