我试图从每个电话号码中删除“(”,“)”,“ - ”,“x”或“X”“ext”和空格,所以我只留下前10位或电话号码的前10个号码。
是否有一种简单的方法只允许前10个数字在sql 2000中通过。我正在考虑使用替换,但它需要替换每个字符或字符组,并且不是很整洁。是否有一种标准安装sql2000的方法只返回前10个数字。
之前和之后的例子
Before After
(555) 555-5555 ext55555 5555555555
340 555-5555 3405555555
答案 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
虽然它有点笨拙,但它应该符合你的目的。