SQL でゼロパディング (zero padding / left pad) する
SQL でゼロパディング (zero padding / left pad) するには?
数値をファイルやレポートに出力する時に、既定の桁数に 0 埋めして出力したい時ありますよね。
このような処理は SQL Server の得意分野ではないかもしれませんが、便利な時もあると思います。
ここでは、 SQL でゼロパディング (zero padding) する方法についてご紹介します。
SQL でゼロパディング (zero padding / left pad)
SQL でゼロパディング (zero padding) する方法は何通りかありますが、ここではシンプルな方法をご紹介します。
例えば、以下のような Student テーブルがあるとします。
この StudentID を右に寄せて、合計で 10 桁になるように左側を 0 で埋めるスクリプトは以下の通りです。
SELECT RIGHT('0000000000' + CAST(StudentID AS NVARCHAR), 10) AS LeftPad,
StudentID,
StudentName
FROM Student;
StudentID,
StudentName
FROM Student;
まず、CAST を使って数字を文字に変換します。
ここで注意したいのは、数字の桁数が、変換後の桁数より大きい場合は、変換時にエラーとなってしまうことです。 桁数が足りる長さに変換してください。
ちなみに NVARCHAR は長さの定義を省略すると30 桁でしたね。
その、CAST した文字列の前に、文字列で 0 を指定の桁数分、今回のケースでは合計で 10 桁にしたいので 10 個足します。
そのつなげた文字列を RIGHT を使って右から 10 桁分取得することで、左側 0 で埋めることができます。
その際、数字が10桁を超える場合には、超えた分左側が切れてしまうので、桁数を決める時には気をつけてください。
同じような方法で、 0 の代わりに他の文字や空白で左側を埋めたり、また CAST と LEFT を使うことによって、文字を左に寄せて右側を 0 で埋めることも可能です。
SELECT RIGHT('__________' + CAST(StudentID AS NVARCHAR), 10) AS LeftPad2,
LEFT(CAST(StudentID AS NVARCHAR) + '0000000000', 10) AS RightPad,
StudentID,
StudentName
FROM Student;
LEFT(CAST(StudentID AS NVARCHAR) + '0000000000', 10) AS RightPad,
StudentID,
StudentName
FROM Student;