MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLで郵便番号の先頭に0を埋める方法|LPAD()関数の使い方

MySQLでは、LPAD()関数を使うことで、文字列の左側(先頭)に任意の文字を埋め込むことができます。これを利用すると、INT型などで保存された郵便番号の先頭に「0」を付けて桁数を揃える(ゼロパディング)処理が簡単に行えます。例えば、5桁の郵便番号「23455」を6桁表記の「023455」に変換したいようなケースで役立ちます。

LPAD()関数の基本構文

SELECT LPAD(カラム名, 桁数, '0') AS 別名 FROM テーブル名;

第2引数に最終的な文字列の長さを、第3引数に埋め込みたい文字を指定します。足りない分だけ先頭に指定文字が繰り返し追加されます。

サンプルテーブルを作成して確認してみよう

それでは、実際にLPAD()関数の動きを確認していきましょう。まず、郵便番号を格納するカラムを持つテーブルを作成します。

mysql> CREATE TABLE ZipCodePadWithZeroDemo
    -> (
    -> Name VARCHAR(200),
    -> YourZipCode INT(6)
    -> );
Query OK, 0 rows affected (0.44 sec)

レコードの挿入

続いて、サンプルデータをテーブルに挿入します。

mysql> INSERT INTO ZipCodePadWithZeroDemo VALUES('John', 23455);
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO ZipCodePadWithZeroDemo VALUES('Carol', 46523);
Query OK, 1 row affected (0.62 sec)

mysql> INSERT INTO ZipCodePadWithZeroDemo VALUES('Johnson', 12345);
Query OK, 1 row affected (0.11 sec)

mysql> INSERT INTO ZipCodePadWithZeroDemo VALUES('David', 34567);
Query OK, 1 row affected (0.18 sec)

登録済みデータの確認

テーブル内のすべてのレコードを表示して、現状を確認してみます。

mysql> SELECT * FROM ZipCodePadWithZeroDemo;

実行結果は以下の通りです。

+---------+-------------+
| Name    | YourZipCode |
+---------+-------------+
| John    | 23455       |
| Carol   | 46523       |
| Johnson | 12345       |
| David   | 34567       |
+---------+-------------+
4 rows in set (0.00 sec)

この時点では、郵便番号は先頭に0の付かない5桁の数値として保存されています。

LPAD()関数で先頭に0を付けて表示する

それでは、最初に紹介した構文を使って、郵便番号の先頭に「0」を埋めてみましょう。以下のクエリを実行します。

mysql> SELECT LPAD(YourZipCode, 6, '0') AS UPDATEDZIPCODE FROM ZipCodePadWithZeroDemo;

氏名も一緒に表示したい場合は、Nameカラムも合わせて指定します。

mysql> SELECT Name, LPAD(YourZipCode, 6, '0') AS UPDATEDZIPCODE FROM ZipCodePadWithZeroDemo;

実行すると、氏名とともに先頭に「0」が付いた6桁の郵便番号が取得できます。

+---------+----------------+
| Name    | UPDATEDZIPCODE |
+---------+----------------+
| John    | 023455         |
| Carol   | 046523         |
| Johnson | 012345         |
| David   | 034567         |
+---------+----------------+
4 rows in set (0.00 sec)

このように、LPAD()関数を使えば元のデータを変更することなく、表示や出力の段階で先頭に0を付けた形式に整形できます。

補足:郵便番号はVARCHAR型で保存するのがおすすめ

なお、郵便番号のような計算に使わない数値は、本来VARCHAR型などの文字列型で保存するのがベストプラクティスとされています。また、MySQL 8.0.17以降では、整数型の表示幅指定(INT(6)など)は非推奨になっている点にも注意してください。新規にテーブルを設計する場合は、郵便番号カラムをVARCHAR(7)などで定義しておくことで、先頭の0が欠落する問題そのものを未然に防ぐことができます。

  1. PHPとMySQLでブール値を扱うには?BOOL・BOOLEAN・TINYINT(1)の違いと使い方

    本記事では、MySQL 8.0.12を使用して、ブール(Boolean)値の正しい取り扱い方を解説します。まず、使用しているMySQLのバージョンを確認しておきましょう。 mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.12 | +-----------+ 1 row in set (0.00 sec) MySQLにおけるブール値の基本:BOOL・BOOLEAN・TINYINT(1) MySQLでブール値を扱うには、BOOL、BOOLEAN、またはTINYINT(1)のいずれかを使用

  2. JDBCでMySQLのバックスラッシュをエスケープするには?PreparedStatementの使い方を解説

    PreparedStatementでバックスラッシュを安全にエスケープするMySQLにデータを挿入する際、バックスラッシュ(\)などの特殊文字を安全に扱うには、PreparedStatementを使用するのが最も確実な方法です。PreparedStatementはパラメータを自動的にエスケープしてくれるため、手動で「\\」のように置き換える必要がなく、SQLインジェクション対策としても有効です。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1904 ( ClientId int, ClientName var