有人可以告诉我,以下施工有什么问题?:
CASE @CountryID
WHEN 1 THEN SET @String = REPLACE(@String,'+420','')
WHEN 2 THEN SET @String = REPLACE(@String,'+421','')
WHEN 3 THEN SET @String = REPLACE(@String,'+359','')
WHEN 4 THEN SET @String = REPLACE(@String,'+7','')
WHEN 5 THEN SET @String = REPLACE(@String,'+48','')
WHEN 7 THEN SET @String = REPLACE(@String,'+63','')
END
Run Code Online (Sandbox Code Playgroud)
@CountryID
是INT
.
问题出现在CASE声明构造中,因为IF语句运行良好,但我看不到任何故障,尝试了不同类型的案例构建并搜索了文档.
任何提示都会很感激.
你需要使用:
SELECT @String =
CASE @CountryID
WHEN 1 THEN REPLACE(@String,'+420','')
WHEN 2 THEN REPLACE(@String,'+421','')
WHEN 3 THEN REPLACE(@String,'+359','')
WHEN 4 THEN REPLACE(@String,'+7','')
WHEN 5 THEN REPLACE(@String,'+48','')
WHEN 7 THEN REPLACE(@String,'+63','')
-- ELSE @String -- to avoid NULL if no country found
END;
Run Code Online (Sandbox Code Playgroud)
CASE is expression
,但你用它CASE statement
(例如在Oracle/DB2中可用)
Oracle支持两种CASE statement
(不可用T-SQL
):
CASE
WHEN jobid = 'PU_CLERK' THEN sal_raise := .09;
WHEN jobid = 'SH_CLERK' THEN sal_raise := .08;
WHEN jobid = 'ST_CLERK' THEN sal_raise := .07;
ELSE sal_raise := 0;
END CASE;
Run Code Online (Sandbox Code Playgroud)
appraisal :=
CASE grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
WHEN 'D' THEN 'Fair'
WHEN 'F' THEN 'Poor'
ELSE 'No such grade'
END;
Run Code Online (Sandbox Code Playgroud)
编辑:
正如HABO所提到的,你可以将它重写为:
SELECT @String = REPLACE(@String,
CASE @CountryID
WHEN 1 THEN '+420'
WHEN 2 THEN '+421'
WHEN 3 THEN '+359'
WHEN 4 THEN '+7'
WHEN 5 THEN '+48'
WHEN 7 THEN '+63'
ELSE ''
END, '');
Run Code Online (Sandbox Code Playgroud)
或者在SQL Server 2012及更高版本中,您可以使用CHOOSE
:
SELECT @String =
REPLACE(@String, CHOOSE(CountryId,'+420','+421','+359','+7','+48', '+63'), '')
Run Code Online (Sandbox Code Playgroud)