SQL Server 2000:如何仅返回电话号码列中的号码

时间:2011-06-16 20:51:46

标签: sql sql-server sql-server-2000

我试图从每个电话号码中删除“(”,“)”,“ - ”,“x”或“X”“ext”和空格,所以我只留下前10位或电话号码的前10个号码。

是否有一种简单的方法只允许前10个数字在sql 2000中通过。我正在考虑使用替换,但它需要替换每个字符或字符组,并且不是很整洁。是否有一种标准安装sql2000的方法只返回前10个数字。

之前和之后的例子
Before                      After
(555) 555-5555 ext55555     5555555555
340 555-5555                3405555555

3 个答案:

答案 0 :(得分:4)

看看是否有效:

Declare @Expression varchar(15)
Declare @MyVariable varchar(20)

Set @Expression = '%[^0-9]%' 
Set @MyVariable = '(555) 555-5555 ext55555'

While PatIndex(@Expression, @MyVariable) > 0
   Set @MyVariable = Stuff(@MyVariable, PatIndex(@Expression, @MyVariable), 1, '')

Print @MyVariable

555555555555

答案 1 :(得分:3)

我认为你唯一的选择就是创建一个能够做到这一点的UDF。如果您使用的是2005+,则可以创建一个CLR函数来执行此操作。

UDF:

create function dbo.RemoveNonNumericChar(@str varchar(500))  
returns varchar(500)  
begin  
declare @startingIndex int  
set @startingIndex=-1 
while @startingIndex <> 0 
begin  
    set @startingIndex= patindex('%[^0-9]%',@str)  
    if @startingIndex <> 0  
    begin  
        set @str = replace(@str,substring(@str,@startingIndex,1),'')  
    end   
end  
return @str  
end

go  

select dbo.RemoveNonNumericChar('(555) 555-5555 ext55555')  

答案 2 :(得分:0)

另一种方法,如果您不想使用用户定义函数,则可以使用REPLACE函数,如下所示:

SELECT Phone, REPLACE(REPLACE(REPLACE(REPLACE(Phone,' ',''),'(',''),')',''),'-','') AS NewPhone
FROM Contacts

虽然它有点笨拙,但它应该符合你的目的。