SQL Server 2000: как вернуть только номер из столбца номера телефона - PullRequest
4 голосов
/ 17 июня 2011

Я пытаюсь убрать "(", ")", "-", "x" или "X", "ext" и пробелы из каждого телефонного номера, поэтому у меня остаются только первые 10 цифр или Первые 10 номеров телефона.

Есть ли простой способ разрешить прохождение только первых 10 цифр в sql 2000. Я думал об использовании замены, но она требует замены для каждого символа или группы символов и не очень аккуратна. Есть ли способ при стандартной установке sql2000 вернуть только первые 10 цифр.

Примеры до и после

Before                      After
(555) 555-5555 ext55555     5555555555
340 555-5555                3405555555

Ответы [ 3 ]

4 голосов
/ 17 июня 2011

Проверьте, работает ли это:

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

3 голосов
/ 17 июня 2011

Я думаю, что ваш единственный вариант - создать 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')  
0 голосов
/ 17 июня 2011

Другой способ сделать это, если вы не хотите использовать пользовательскую функцию, это использовать функцию REPLACE, например:

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

Хотя это немного клунки, оно должно служить вашей цели.

...