0パディング、スペースパディングする方法

MySQL で 0 パディング( 0 埋め)やスペースパディング(スペース埋め)する方法の説明です。パディングには LPAD で右寄せする方法と、RPAD で左寄せする方法があります。

右寄せしてパディングする方法

右寄せの場合(左側にパディング)
LPAD(対象の文字列, パディング後の文字数, パディングする文字)
123 を右寄せし、0埋めして10桁にする場合
LPAD(123, 10, '0')
ABC を右寄せし、スペース埋めして5桁にする場合
LPAD('ABC', 5, ' ')

以下の例では、「num_test」テーブルの「age」列を右寄せ、0 埋めして10桁にしています。

LPAD で右寄せ、0 パディングして 10 桁に揃える例。
mysql> SELECT age, LPAD(age, 10, '0') FROM num_test;
+------+--------------------+
| age  | LPAD(age, 10, '0') |
+------+--------------------+
|    1 | 0000000001         |
|   20 | 0000000020         |
|   35 | 0000000035         |
|   65 | 0000000065         |
|  121 | 0000000121         |
|  982 | 0000000982         |
+------+--------------------+
6 rows in set (0.00 sec)

mysql>

左寄せしてパディングする方法

左寄せの場合(右側にパディング)
RPAD(対象の文字列, パディング後の文字数, パディングする文字)
123 を左寄せし、0埋めして10桁にする場合
RPAD(123, 10, '0')
ABC を左寄せし、スペース埋めして5桁にする場合
RPAD('ABC', 5, ' ')
RPAD で右寄せ、0 パディングして 10 桁に揃える例。
mysql> SELECT age, RPAD(age, 10, '0') FROM num_test;
+------+--------------------+
| age  | RPAD(age, 10, '0') |
+------+--------------------+
|    1 | 1000000000         |
|   20 | 2000000000         |
|   35 | 3500000000         |
|   65 | 6500000000         |
|  121 | 1210000000         |
|  982 | 9820000000         |
+------+--------------------+
6 rows in set (0.00 sec)

mysql>

パディングする文字について

ちなみにパディングする文字は 0 とスペース以外にも任意の文字が指定可能です。

a でパディングしてみた場合
mysql> SELECT age, RPAD(age, 10, 'a') FROM num_test;
+------+--------------------+
| age  | RPAD(age, 10, 'a') |
+------+--------------------+
|    1 | 1aaaaaaaaa         |
|   20 | 20aaaaaaaa         |
|   35 | 35aaaaaaaa         |
|   65 | 65aaaaaaaa         |
|  121 | 121aaaaaaa         |
|  982 | 982aaaaaaa         |
+------+--------------------+
6 rows in set (0.00 sec)

mysql>

1 文字だけでなく、文字列の指定も可能です。

hoge でパディングしてみた場合
mysql> SELECT age, RPAD(age, 10, 'hoge') FROM num_test;
+------+-----------------------+
| age  | RPAD(age, 10, 'hoge') |
+------+-----------------------+
|    1 | 1hogehogeh            |
|   20 | 20hogehoge            |
|   35 | 35hogehoge            |
|   65 | 65hogehoge            |
|  121 | 121hogehog            |
|  982 | 982hogehog            |
+------+-----------------------+
6 rows in set (0.00 sec)

mysql>
更新日: