2014-11-07 2 views
0

Попытка просто вернуть 10-значный телефонный номер - Я думаю, что я сделал хорошо для удаления различных нечисловых символов --Что мне нужна помощь с удалением ' 1 ' из тех случаев, у которых есть номер телефона в формате' 1 (xxx) xxx-xxxx '.Использование оператора if внутри скалярной функции SQL Server 2012

IF OBJECT_ID (N'dbo.CleanPhone',N'FN') IS NOT NULL 
DROP FUNCTION dbo.CleanPhone 
GO 

CREATE FUNCTION dbo.CleanPhone (@PhoneNumber varchar(200)) 
RETURNS varchar(10) 
AS 

BEGIN 

DECLARE @CleanPhone varchar(200); 

SET @CleanPhone = replace(replace(replace(replace(replace(ltrim(rtrim(@PhoneNumber)),'-',''),' ',''),'(',''),')',''),'.','') 

--being mysudo code 
IF LEN @CleanPhone > 10 AND Left(@CleanPhone,2) = '1 ' THEN Right(CleanPhone,10) 
ELSE @CleanPhone 
--end my sudo code 
RETURN @CleanPhone 
END; 
GO 
+1

После удаления всех специальных символов из поля PhoneNumber, просто возвращаем направо (CleanPhone, 10). Нет необходимости в состоянии IF вообще. – knkarthick24

ответ

1

С вашего PhoneNumber имеет следующий формат: '1 (ххх) ххх-хххх'

Вы можете пойти с

SET @CleanPhone = replace(replace(replace(replace(replace(ltrim(rtrim(@PhoneNumber)),'-',''),' ',''),'(',''),')',''),'.','') 

Заменить вышеуказанное заявление в

SET @CleanPhone = right(<all your replace goes here>,10) 
RETURN @CleanPhone 
0

Просто предложение для удобства обслуживания кода по дороге и удобочитаемости, я бы рекомендовал обрабатывать различные условия используя регистр case.

SET @CleanPhone = СЛУЧАЙ КОГДА Condition1 ТОГДА результат КОГДА condition2 ТО result2 ELSE defaullVal END

Смежные вопросы