Tsql 在标量函数SQL Server 2012中使用if语句

Tsql 在标量函数SQL Server 2012中使用if语句,tsql,sql-server-2012,Tsql,Sql Server 2012,正在尝试返回10位数的电话号码 --我认为我在删除各种非数字字符方面做得很好 --我需要的帮助是删除“1” 从那些电话号码为“1(xxx)xxx xxxx”格式的案例中 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

正在尝试返回10位数的电话号码 --我认为我在删除各种非数字字符方面做得很好 --我需要的帮助是删除“1” 从那些电话号码为“1(xxx)xxx xxxx”格式的案例中

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(xxx)xxx xxxx”

你可以和我一起去

SET @CleanPhone =  replace(replace(replace(replace(replace(ltrim(rtrim(@PhoneNumber)),'-',''),' ',''),'(',''),')',''),'.','')
将上述声明替换为

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

为了便于代码维护和可读性,我建议使用case语句处理不同的情况

设置@CleanPhone=CASE,条件1然后结果 当条件2产生结果2时 艾尔斯德法瓦尔酒店
结束

删除PhoneNumber字段中的所有特殊字符后,只需返回right(CleanPhone,10)。完全不需要IF条件。