【问题标题】:SQL to remove characters from phone number [duplicate]SQL从电话号码中删除字符[重复]
【发布时间】:2015-11-19 22:20:26
【问题描述】:

我正在使用数据仓库,我需要从电话号码列中删除一堆案例,以便能够将其用作对另一个数据源的查找。数据的一些例子:

888-888-8888 ---> 应该是 888888888
(888) 888-8888 ---> 应该是 888888888
888.888.8888 ---> 应该是 888888888
888-888-888 分机 888 ---> 应该是 888888888
1-888-888-888 ---> 应该是 888888888
888 88 8888 888888 --->应该是888888888888888

我能够执行多个替换语句来摆脱简单的字符,如 -、.、(、)。我遇到问题的部分是删除'ext 888'和'1-',其中数字以'1-'(不包含)开头。 888 可以是任意数字,也可以是任意数量的数字。处理用户输入的信息和多个国家/地区。

有什么我可以用 SQL 编写的东西来完成最后两部分吗?

【问题讨论】:

  • trim 会删除前导空格,upper(left(f,3)) = 'EXT' 会告诉你它是否以它开头,或者你可以删除非数字。

标签: sql sql-server regex


【解决方案1】:

“ext 888”可以通过以下方式修复:-

select STUFF('1-888-888-888 ext 888', PATINDEX('%ext [0-9][0-9][0-9]%', '1-888-888-888 ext 888'),8,'')

对于以1开头的部分,你可以试试:-

select STUFF('1-888-888-888',1,2,'')

在这两个示例中,您都可以将“1-888-888-888....”部分替换为您的列名。

【讨论】:

  • 我本来打算试试的,但 'ext 888' 可以是任何东西。'ext: 888'、'x888'、'ext888' 等。我想我只需要输入一个每种可能情况的规则?
  • 我会这么说,是的。鉴于您的示例,没有一种简单的方法可以识别所有可能的组合..
  • @MatRichardson 好吧,您可以结合查询并获得完美的结果,我的删除所有非数字。
  • 好吧,猜猜这会起作用,因为我只需要设置一次!谢谢
猜你喜欢
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多