SQL Server において、数値をゼロ埋めする(パディング)する方法です。
数値をゼロ埋めする
数値をゼロ埋めすることをゼロパディングと言います。パディングと言うのは、埋めるという意味です。
例えば、数値の「123」があって、「5桁までゼロ(ゼロパディング)する」場合、「00123」の状態にすることを言います。
ゼロで無くても、XやYで埋めても、その行為自体はパディングです。「○○埋め」と言った方が伝わりやすいですが、ゼロパディングって言った方がカッコいい(ドヤ顔出来る)ので、みんなパディングと言ってます。
SQL Server ではゼロ埋めする方法はいくつかありますが、主に2つが用いられています。
- RIGHT関数
- FORMAT関数
Oracleだと便利な「LPAD」「RPAD」があるのですが、残念ながら SQL Server では使用できません。
RIGHT関数でゼロ埋めするサンプル
RIGHT関数でゼロ埋めする場合、とても簡単です。
RIGHT関数の引数に、それぞれ以下を渡してあげます。
- 第1引数:文字データ or バイナリデータの式
- 第2引数:正の整数(マイナスはエラー、小数点以下切り捨て)
これだけです。
サンプルで5桁までゼロ埋めするSQLです。
--ゼロ埋めするSQL(RIGHT関数) SELECT RIGHT('00000' + '10',5)
取り敢えず上記のSQLを実行してみて下さい。「10」という値が「00010」になります。
ちなみに、ゼロ以外でも埋まります。
--Xで5桁を埋めるSQL(RIGHT関数) SELECT RIGHT('XXXXX' + '10',5)
5桁まで「X」で埋めてみます。
ゼロ以外の値でも埋めることが出来ました。
FORMAT関数でゼロ埋めする
純粋に数字だけをパディングの対象にしたい場合は、FORMAT関数の方が簡単です。
関数の引数に、それぞれ以下を渡してあげます。
- 第1引数:数値(小数点以下は四捨五入扱い)
- 第2引数:埋めたい値(数値以外を入れると、指定した値で埋まる)
サンプルで5桁までゼロ埋めするSQLです。
SELECT FORMAT(10,'00000');
これだけです。実行すると、
ゼロ埋めされています。
ただし、FORMAT関数の場合、第2引数が数値の場合はパディングしてくれますが、第2引数が数値以外の場合はパディングせず、第2引数に指定した値が戻って来ます。
例えば、これ。
SELECT FORMAT(10,'XXXXX');
RIGHT関数だと「XXX10」という結果でしたが、FORMAT関数で実行してみると…
となり、第2引数に指定した値がそのままで戻って来ます。
基本的にRIGHT関数で良いと思う
RIGHT関数・FORMAT関数のどちらでもパディング出来ますが、基本的にRIGHT関数で良いと思います(LEFT関数でも同じ話)。
ただし、SQLクエリ、もしくはストアドプロシージャの中に、RIGHT関数・FORMAT関数の両方が混在していることが一番まずいです。
何か意図があって混在させているのであれば問題ありませんが、何も考えずに混在させるのは避けましょう。