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;

対象の文字列が指定した文字数よりも長い場合
指定した文字数よりも長い場合は、カットされます。
/* MySQL 指定した文字数よりも長い場合のサンプル */
SELECT STR,LPAD(STR,2,'#') FROM testdb.WORK;

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

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

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;
