Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLで、指定した桁数を0で埋めるゼロパディング処理についてまとめています。

数値を指定桁数まで0で埋めるには、lpadを使う

例えば、数値の1を4桁の0埋め(0パディング)して0001にするには、lpad関数が便利です。

以下の書式で使用できます。

lpad(値,桁数,埋める文字)

MySQLで実際にSQLを実行してみましょう。

// 4桁の0埋め
mysql> select lpad(1, 4, '0');
+-----------------+
| lpad(1, 4, '0') |
+-----------------+
| 0001            |
+-----------------+
1 row in set (0.00 sec)

//2桁の数字を4桁の0埋め
mysql> select lpad(99, 4, '0');
+------------------+
| lpad(99, 4, '0') |
+------------------+
| 0099             |
+------------------+
1 row in set (0.00 sec)

//4桁の数字を4桁の0埋め (そのまま出力される)
mysql> select lpad(1234, 4, '0');
+--------------------+
| lpad(1234, 4, '0') |
+--------------------+
| 1234               |
+--------------------+
1 row in set (0.00 sec)

//1を文字列'A'で左詰め
mysql> select lpad(1, 4, 'A');
+-----------------+
| lpad(1, 4, 'A') |
+-----------------+
| AAA1            |
+-----------------+
1 row in set (0.00 sec)

//1を0で右詰めで埋める
mysql> select rpad(1, 4, '0');
+-----------------+
| rpad(1, 4, '0') |
+-----------------+
| 1000            |
+-----------------+
1 row in set (0.00 sec)

//文字xを左詰めでzで埋める

mysql> select lpad('x',4,'z');
+-----------------+
| lpad('x',4,'z') |
+-----------------+
| zzzx            |
+-----------------+
1 row in set (0.09 sec)

//数値1を左詰めでabcabcabc...で埋める
mysql> select lpad(1, 10, 'abc');
+--------------------+
| lpad(1, 10, 'abc') |
+--------------------+
| abcabcabc1         |
+--------------------+
1 row in set (0.00 sec)

MySQLの場合、テーブルの属性にZEROFILLを指定すると挿入された値が0埋めされて格納されます。

mysql> CREATE TABLE `demo`(
`id` int(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, `num` int(3) ZEROFILL NOT NULL);
Query OK, 0 rows affected, 3 warnings (0.28 sec)

mysql> INSERT INTO `demo`(`num`) VALUES (1);
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO `demo`(`num`) VALUES (20);
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO `demo`(`num`) VALUES (999);
Query OK, 1 row affected (0.01 sec)

mysql> select * from demo;
+----+-----+
| id | num |
+----+-----+
|  1 | 001 |
|  2 | 020 |
|  3 | 999 |
+----+-----+
3 rows in set (0.00 sec)

自動的に数値が増えるincrement属性のカラムにたいしてもZEROFILL指定が可能です。以下は、increment属性のカラムidを持つテーブルにデータを挿入した例です。

mysql> CREATE TABLE `demo2`(
`id` int(10) zerofill  NOT NULL PRIMARY KEY AUTO_INCREMENT, `num` int(3)  NOT NULL);

mysql> INSERT INTO `demo2`(`num`) VALUES (1);
Query OK, 1 row affected (0.09 sec)
mysql> INSERT INTO `demo2`(`num`) VALUES (20);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `demo2`(`num`) VALUES (999);
Query OK, 1 row affected (0.00 sec)
mysql> select * from demo2;
+------------+-----+
| id         | num |
+------------+-----+
| 0000000001 |   1 |
| 0000000002 |  20 |
| 0000000003 | 999 |
+------------+-----+
3 rows in set (0.07 sec)

【関連記事】
MySQLで利用可能な整数型について解説!int(11)のカッコに設定された数値って何?

Oracleでの0埋めはlpad。 to_charでの0字詰めには半角空白が入る

Oracleでもlpad関数で0埋めが可能です。

select lpad(1, 5, '0') from dual;

lpad(1, 5, '0')
---------------
00001

Oracleでto_charを使って0字詰めをおこなうと、先頭に半角空白が入ります。以下の例は、文字列TESTに「1」の0字詰め「01」を結合しようとした例です。

select 'TEST'||to_char(1, '00') name  from dual;

NAME
-------
TEST 01

空白部分は符号が入るための領域です。数値がマイナスの場合は「-」が入ります。文字列操作関数などを使って符号部分を削除することも可能ですが、代わりにlpadもしくはrpadを使いましょう。rpadは右詰めの0パディングをおこなう関数です。

select 'TEST'||lpad(1, 2,'00') name  from dual;

NAME
-------
TEST01

PogureSQLもlpadで0埋めが可能。第一引数は文字列型にする必要あり

PosgreSQLでもlpad関数が使用できます。ただし、第一引数は文字列型にする必要があります。

SELECT lpad('1',3,'0');

| lpad |
|------|
|  001 |

第一引数に整数型を指定すると、以下のエラーが出力されます。

SELECT lpad(1,3,'0');

ERROR: function lpad(integer, integer, unknown) does not exist
  Hint: No function matches the given name and argument types. You might need to add explicit type casts.
  Position: 8

SQL ServerはRIGHT関数やFORMAT関数で0埋めする

SQL Serverには、ほかのDBMSにあるようなlpadやrpadなどの専用の字詰関数がありません。以下のようにright関数またはleft関数(右詰めの場合)を使います。

SELECT RIGHT('00000' + CONVERT(NVARCHAR, 11), 5);

|       |
|-------|
| 00011 |

また、日付やカンマ区切りに使うformat関数を使って0パディングが可能です。

SELECT FORMAT(1,'0000');

|      |
|------|
| 0001 |

まとめ

 

ポテパンダの一言メモ
  • MySQLなどではlpad関数で0埋めが可能
  • Oracleでは、to_char関数を使って0埋めすると半角空白が入るので、lpadを使う
  • PostgreSQLでは、lpad関数の第一引数を文字列型にする必要あり
  • SQL Serverでlpad関数は使えない。right関数やformat関数を使って0埋めする。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。