Php 如何从SQL记录中的电话号码中删除前导国家代码?

Php 如何从SQL记录中的电话号码中删除前导国家代码?,php,sql,trim,Php,Sql,Trim,我目前正试图找出如何从我的SQL查询中的一些电话号码记录中删除前导国家代码。基本上,我选择的一些记录在数字前有1个美国或44个英国国家代码。我希望能够检测哪些记录具有此国家/地区代码,然后将其分离到单独的列中。以下是提取电话号码数据的当前查询: SELECT REPLACE(REPLACE(REPLACE(REPLACE(tbl_vsed_unvalidated.telephonenumber,'#',null),'-',null),' ',null),'+',null) AS "PHON

我目前正试图找出如何从我的SQL查询中的一些电话号码记录中删除前导国家代码。基本上,我选择的一些记录在数字前有1个美国或44个英国国家代码。我希望能够检测哪些记录具有此国家/地区代码,然后将其分离到单独的列中。以下是提取电话号码数据的当前查询:

SELECT REPLACE(REPLACE(REPLACE(REPLACE(tbl_vsed_unvalidated.telephonenumber,'#',null),'-',null),' ',null),'+',null)
   AS "PHONE 1"
此查询从数据库中的电话号码表列中提取数据,然后剥离任何、、和空格。为了尝试删除国家代码,我正在考虑使用以下内容:

If(len>10){trim(Leading "1" from "PHONE 1")}
你喜欢这个工作吗?另外,我如何将此1存储到名为PHONE 1 COUNTRY CODE的新实体中

最终,我还需要能够从记录中删除一个尾随扩展,但我假设这将是一个类似的过程。例如,如果数字是180012345671234,我需要能够剥离前导1和尾随1234,并将它们分别存储在新的单独列中

谢谢你的帮助


皮特

我的建议是

一个for循环,它遍历每个数字并检测长度,如果它的+44将是x长度

如果是美国,它将是y长度

看看你能不能写些与之相匹配的东西


然后,一旦你有了一个粗略的匹配,看看你是否可以在仍然处于循环中的情况下删除号码。

这是一个使用CASE按长度处理电话号码的基本示例。你必须改变长度以适应你的现实。如果你的电话号码有+或paren等,你应该先将它们规范化,这样剩下的就是一个数字串。至于带分机的手机,它们将显示在“ELSE”条款下,您可以像您所说的那样,在以后解决如何处理它们。希望这至少能让你开始

SELECT 
   CASE phone
      WHEN Length(phone) = 10 THEN phone
      WHEN Length(phone)  = 11 THEN substr(phone,2)
      WHEN Length(phone)  = 14 THEN substr(phone,4)
      ELSE phone
   END AS Phone from customers 

我认为这比你想象的要复杂得多。例如,英国的电话号码比美国/加拿大的电话号码要长—在这里进行简单的搜索—因此,我觉得处理国家代码以外的任何内容都需要国家代码,如果您的一些记录丢失了国家代码,您还需要进行哪些其他数据?我甚至不认为所有国家都有相同的国际访问代码。这里是+或00,请参见。因此,首先,您需要检测是否使用了国际访问代码,然后才能确定使用了哪个国家代码。见,谢谢你提供的信息。幸运的是,我们所有的记录都在不同的服务器上按国家分割。因此,我可以查询仅美国记录和仅英国记录,并适当地应用不同的过滤器。