MySQLにハイフンなしで登録されているデータを、ハイフンありで表示したりハイフンありのデータに更新をする方法についてです。
INSERT関数を使用する
insert文ではなく、insert関数を使用することで、文字列に文字列を追加することができます。
調べてもInsert関数ではなくInsert文ばかり出てきてしまうのでまとめました。。
位置 pos で始まる部分文字列と、文字列 newstr で置換された len 文字長とともに、文字列 str を返します。
参考
https://dev.mysql.com/doc/refman/5.6/ja/string-functions.html#function_insert
郵便番号にハイフンを追加する
1001100
を 100-1100
とする方法です。
細かい挙動については公式のマニュアルを参考にしてください。
mysql> SELECT INSERT('1001100', 4, 0, '-');
+------------------------------+
| INSERT('1001100', 4, 0, '-') |
+------------------------------+
| 100-1100 |
+------------------------------+
1 row in set (0.00 sec)
適当にusersテーブルにzipcodeカラムを持っているとして、先ほどのINSERT関数をupdate文と組み合わせます。
mysql> update users set zipcode = (SELECT INSERT(zipcode, 4, 0, '-')) where id = 1;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from users where id = 1;
+----+----------+
| id | zipcode |
+----+----------+
| 1 | 100-1100 |
+----+----------+
1 row in set (0.00 sec)
レコードによってハイフンがあったりなかったりという場合には、このようなwhere文を追加すれば、ハイフンなしのデータのみ更新ができます。
where zipcode not like '%-%';