MySQLで郵便番号をハイフン区切りにして表示したい
こんにちは
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)
おわり
もっとスマートな方法もとむ。
参考と注釈
Author And Source
この問題について(MySQLで郵便番号をハイフン区切りにして表示したい), 我々は、より多くの情報をここで見つけました https://qiita.com/B73W56H84/items/cff78b18dc60603d66a6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .