SQL道場 文字列関数 LPAD関数

SQLで左から文字列を指定した文字で左埋めするLPAD関数について記載しています。

対応データベースMySQL Oracle PostgreSQL

LPAD関数の文法

SELECT LPAD(対象の文字列,充填後の文字列長,充填する文字列) FROM テーブル
引数対象の文字列文字列型
充填後の文字列長正数型
充填する文字列文字列型
返値文字列型 編集後の文字列が戻ります。

LPAD関数は指定された文字列を充填後の文字列長になるまで左から充填文字列で埋めます。文字列長はバイト単位で指定します。PostgreSQLでは充填する文字列を省略することができ、この場合はスペースが充填されます。右から文字列を充填する場合はRPAD関数を使用します。

充填する文字列が2文字以上の場合は、埋める必要がある文字数になるまで、埋める文字が繰り返されます。用途しては、固定長の文字列を生成する際のパディングとして使用することができます。また、あまり好ましい方法ではないですが、帳票などで空白や半角空白などでインデックスする場合などにも利用できます。

実行例

MySQLの実行例

/* MySQL 左から指定した文字列を充填するサンプル */
SELECT STR,LPAD(STR,15,'#') FROM testdb.WORK;
LPAD関数サンプル実行結果

対象の文字列が指定した文字数よりも長い場合

指定した文字数よりも長い場合は、カットされます。

/* MySQL 指定した文字数よりも長い場合のサンプル */
SELECT STR,LPAD(STR,2,'#') FROM testdb.WORK;
LPAD関数サンプル実行結果

埋める文字が2文字以上の場合

/* MySQL 埋める文字が2文字以上の場合のサンプル */
SELECT STR,LPAD(STR,10,'#1') FROM testdb.WORK;
LPAD関数サンプル実行結果

全角の文字列で埋める

/* MySQL 全角の文字列で埋める場合のサンプル */
SELECT STR,LPAD(STR,10,'春') FROM testdb.WORK;
LPAD関数サンプル実行結果

LPADとROW_NUMBERを使って固定長の連番を生成

LPADとROW_NUMBER関数を使用して、一意となる番号を生成することができます。例えば、先頭に記号付きの社員番号や学生ID、注文番号等

/* MySQL Noを昇順にソートし10桁のIDを生成するサンプル */
SELECT No,CONCAT('ST', LPAD(ROW_NUMBER() OVER (ORDER BY No), 8, '0')) AS ID FROM testdb.WORK;
LPAD関数サンプル実行結果