我们将电话号码列表作为数据馈送的一部分。它们都是针对北美公司的。我想删除任何前导“1”或“+1”以及任何尾随信息,如“x100”、“EXT400”等。它们存储在 MariaDB 中,所以我想这样做
UPDATE `CompanyPhone` SET `number`= REGEXP_SUBSTR(`number`,pattern)
要删除不需要的东西,我只需要 REGEX 来选择电话号码的正确部分。
"1 (555) 555-5555 x100" -> "(555) 555-5555"
"+15555555555 EXT400" -> "5555555555"
" 555-555-5555" -> "555-555-5555" (remove leading space)
基本上,我只需要前 10 个数字,如果第一个数字是 1,则忽略第一个数字,以及当前在前 10 个数字(“()”或“”或“-”)中的格式(如果可以保留的话)。
如果一切都可以重新格式化为 (555) 555-5555,那将是一个奖励,但不是必需的。如果需要,我可以进行第二次查询。
你可以用REGEXP_REPLACE
这个。假设您使用的是 MariaDB 10.0.5 或更高版本,则可以使用PCRE
正则表达式。对于您的示例表达式,此正则表达式将为您提供所需的结果(Regex101 上的演示)。它查找 3 组数字(3 位数字、3 位数字和 4 位数字),前面可能是 1,周围还有其他非数字字符(例如+
, -
)。
^(?:\D*)1?(?:\D*)(\d{3})(?:\D*)(\d{3})(?:\D*)(\d{4}).*$
所以你的UPDATE
陈述将变成
UPDATE `CompanyPhone` SET `number`= REGEXP_REPLACE(`number`, '^(?:\\D*)1?(?:\\D*)(\\d{3})(?:\\D*)(\\d{3})(?:\\D*)(\\d{4}).*$', '(\\1) \\2-\\3')
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句