我有一个表格Contact
,其中包含所有带有电话号码的用户联系人,并且需要对电话号码进行一些转换。
我需要查看所有电话号码,并且:
(0)
删除电话号码中出现的以下字符序列;+<country_code>
在缺少前缀和插入电话号码时添加前缀;
例子:
电话号码:
+1 (0) 121 121 121
需要转换为:
+1 121 121 121
电话号码:
(0) 121 121 121
需要转换为:
+1 121 121 121
电话号码:
121 121 121
需要转换为:
+1 121 121 121
根据第1点:
我们可以通过查询选择所有电话号码:
select phone from contact where phone like '%(0)%';
但是如何(0)
仅从数字中删除该序列?如何为此创建更新查询?
根据第2点:
如何识别电话号码是否不包含国家/地区直接号码(前缀+<country_code>
)并在缺少时添加正确的号码?也许这个查询应该可以选择这些数字:
select phone from contact where phone not like '%+%';
我们可以假设。假设我们在联系人表中有一个国家列,对于国家代码列表,我们可以基于此创建临时映射表 -> http://countrycode.org/。我们可以简单地创建一个包含国家代码 <-> 国家前缀映射的临时表,如下所示。
我想应该可以调用一个更新查询,该查询在第一步将选择格式错误的所有电话号码,在第二步将使用新的正确值进行更新,对吗?我对 SQL 不是很了解,所以请帮我创建这样的 SQL 查询?
表联系方式:
+-----+-----------+----------+---------+------------------------+
| id | firstname | lastname | country | phone |
+-----+-----------+----------+---------+------------------------+
| 100 | Frank | Grob | PL | +48 22 121 121 121 | <- OK
| 101 | Bob | Bloby | PL | (0)22 121 121 121 | <- Wrong
| 102 | Alice | Wonder | US | +1 (0) 121 121 121 | <- Wrong
| 103 | Chris | Black | US | +1 (0) 121 121 121 | <- Wrong
| 104 | Rocky | Rocky | US | +1 (0) 121 121 121 | <- Wrong
+-----+-----------+----------+---------+------------------------+
表 COUNTRY_MAPPING:
+-----+--------------+--------+
| id | country_code | prefix |
+-----+--------------+--------+
| 100 | PL | 48 |
| 101 | US | 1 |
+-----+--------------+--------+