Php 如何从SQL记录中的电话号码中删除前导国家代码?
我目前正试图找出如何从我的SQL查询中的一些电话号码记录中删除前导国家代码。基本上,我选择的一些记录在数字前有1个美国或44个英国国家代码。我希望能够检测哪些记录具有此国家/地区代码,然后将其分离到单独的列中。以下是提取电话号码数据的当前查询: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
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,请参见。因此,首先,您需要检测是否使用了国际访问代码,然后才能确定使用了哪个国家代码。见,谢谢你提供的信息。幸运的是,我们所有的记录都在不同的服务器上按国家分割。因此,我可以查询仅美国记录和仅英国记录,并适当地应用不同的过滤器。