LoginSignup
4
3

More than 5 years have passed since last update.

MySQLで郵便番号をハイフン区切りにして表示したい

Posted at

こんにちは:whale2:
varchar(7)なカラムに入っている郵便番号を、表示のときのみハイフン区切りにしたい。

環境情報

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.6.33    |
+-----------+
1 row in set (0.00 sec)

対象にするデータ

  • 今回は NOT NULL で、必ず郵便番号が入っている前提です。
-- こんなかんじ
mysql> select '1234567' AS zip_code;
+----------+
| zip_code |
+----------+
| 1234567  |
+----------+
1 row in set (0.00 sec)

ちゅうい

数値扱いにすると0で始まる北海道、秋田県、岩手県、青森県の郵便番号が欠損してしまうため、文字列として扱いましょう。

-- こうじゃなくて
mysql> SELECT 0000000 AS `number`;
+--------+
| number |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)


-- こう
mysql> SELECT '0000000' AS `string`;
+---------+
| string  |
+---------+
| 0000000 |
+---------+
1 row in set (0.00 sec)

けつろん

mysql> select CONCAT_WS('-', LEFT('1234567', 3), RIGHT('1234567', 4)) AS zip_code;
+----------+
| zip_code |
+----------+
| 123-4567 |
+----------+
1 row in set (0.00 sec)

かんがえかた

  • 元データを2回処理しているのがいけてないですが、RIGHT()LEFT()で以下のように2つに分けます。
--- 左から3文字をとりだす
mysql> select LEFT('1234567', 3) AS zip_code;
+----------+
| zip_code |
+----------+
| 123      |
+----------+
1 row in set (0.00 sec)

--- 右から4文字をとりだす
mysql> select RIGHT('1234567', 4) AS zip_code;
+----------+
| zip_code |
+----------+
| 4567     |
+----------+
1 row in set (0.00 sec)
  • 分離した文字列をCONCAT()CONCAT_WS()で結合しています。
-- 文字列を結合する1
mysql> select CONCAT('123', '-' '4567') AS zip_cd;
+----------+
| zip_cd   |
+----------+
| 123-4567 |
+----------+
1 row in set (0.00 sec)
-- 文字列を結合する2
mysql> select CONCAT_WS('-', 33, 4) AS `なんでや阪神関係ないやろ`;
+--------------------------------------+
| なんでや阪神関係ないやろ             |
+--------------------------------------+
| 33-4                                 |
+--------------------------------------+
1 row in set (0.00 sec)

おわり

もっとスマートな方法もとむ。

参考と注釈

4
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3