我们将电话号码列表作为数据馈送的一部分。它们都是针对北美公司的。我想删除任何前导“ 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,那将是一个奖励,但不是必需的。如果需要,我可以进行第二次查询。
答案 0 :(得分:1)
您可以为此使用REGEXP_REPLACE
。假设您使用的是MariaDB 10.0.5或更高版本,则可以使用PCRE
正则表达式。对于您的示例表达式,此正则表达式将为您提供所需的结果(demo on 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')