2015-11-19 121 views
0

我正在使用数据仓库,我需要从电话号码列中删除一堆个案才能够将其用作另一个数据源上的查找。什么样的数据看起来有些情况是:SQL从电话号码中删除字符

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中编写,可以完成最后2个部分?

+0

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

回答

1

的 '分机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 ....'部分包含您的专栏名称。

+0

我想试试,但'888'可能真的是任何东西..'ext:888','x888','ext888'等。我想我只需要为每种可能的情况制定一个规则? – user985952

+0

我会这么说,是的。有没有一种简单的方法来确定这个给出你的例子的所有可能的组合.. –

+0

@MatRichardson那么你可以结合这两个查询和有完美的结果,我的一切都不是数字。 –

相关问题