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 テーブルがあるとします。

SQL でゼロパディング (zero padding) 1

この StudentID を右に寄せて、合計で 10 桁になるように左側を 0 で埋めるスクリプトは以下の通りです。

SELECT   RIGHT('0000000000' + CAST(StudentID AS NVARCHAR), 10) AS LeftPad,
         StudentID,
         StudentName
FROM     Student;

SQL でゼロパディング (zero padding) 2

まず、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;

SQL でゼロパディング (zero padding) 3

© 2010-2024 SQL Server 入門