SQL Server - CASE 中的 CASE 检查 NULL
Posted
技术标签:
【中文标题】SQL Server - CASE 中的 CASE 检查 NULL【英文标题】:SQL Server - CASE within a CASE checking for NULL 【发布时间】:2010-07-02 21:40:27 【问题描述】:我仍在学习 SQL,所以这似乎是一个非常奇怪的问题,但这是在 CASE 中使用 CASE 检查 NULL 的最佳方法吗?
@FN_InputDt datetime)
RETURNS varchar(3)
as
BEGIN
DECLARE @Result varchar(3),
@MonthNo int
Set @MonthNo = datepart(m,@FN_InputDt)
Set @Result =
CASE WHEN @FN_InputDt IS NOT NULL then
CASE @MonthNo
WHEN 1 then 'JAN'
WHEN 2 then 'FEB'
WHEN 3 then 'MAR'
WHEN 4 then 'APR'
WHEN 5 then 'MAY'
WHEN 6 then 'JUN'
WHEN 7 then 'JUL'
WHEN 8 then 'AUG'
WHEN 9 then 'SEP'
WHEN 10 then 'OCT'
WHEN 11 then 'NOV'
WHEN 12 then 'DEC'
END
END
RETURN @Result
END
【问题讨论】:
【参考方案1】:如果@FN_InputDt 为空,那么@MonthNo 也将为空,因此您可以跳过检查@FN_InputDt 是否为空。
您也可以通过使用@MonthNo 作为索引来选择字符串的一部分来跳过另一种情况:
set @Result = substring(
'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC',
@MonthNo * 3 - 2,
3
)
如果@MonthNo 为空,@Result 也将为空。
【讨论】:
-1,见Jeff的评论,有一个库函数可以获取月份名 @Hogan:是的,这个替代方案值得一提,但它并没有给出与问题中的函数完全相同的结果。 很高兴知道,它有何不同?【参考方案2】:设置@Result = Left(DateName(m,@FN_InputDt) , 3)
这会将月份转换为名称,并且只显示前 3 个字符。
【讨论】:
那不是 DatePart 不是 DateName 吗? @Hogan - DatePart 将返回月份的数值,而不是月份的实际名称。例如,12 而不是 'Dec'。以上是关于SQL Server - CASE 中的 CASE 检查 NULL的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 中的 case 语句中寻找解决方案
where 子句中的 case 语句 - SQL Server
SQL Server 2008 - SELECT 子句中的 Case / If 语句 [重复]