Sql server SQL Server-案例中的案例检查是否为NULL

Sql server SQL Server-案例中的案例检查是否为NULL,sql-server,null,case,user-defined-functions,Sql Server,Null,Case,User Defined Functions,我仍在学习SQL,所以这似乎是一个非常奇怪的问题,但这是在用例中使用用例检查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

我仍在学习SQL,所以这似乎是一个非常奇怪的问题,但这是在用例中使用用例检查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

如果@FN_InputDt为null,那么@MonthNo也将为null,因此您可以跳过检查@FN_InputDt是否为null

您也可以跳过另一种情况,只需使用@MonthNo作为索引来选取字符串的一部分:

set @Result = substring(
  'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC',
  @MonthNo * 3 - 2,
  3
)
如果@MonthNo为null,则@Result也将为null。

Set@Result=Left(DateName(m,@FN\u InputDt),3)


这会将月份转换为名称,只显示前3个字符。

-1,请参阅Jeff的评论,有一个库函数可以获取月份name@Hogan:是的,这个选项非常值得一提,但它给出的结果与问题中的函数不完全相同。很高兴知道,这有什么不同吗?DatePart不是DateName吗?@Hogan-DatePart将返回月份的数值,而不是月份的实际名称。12而不是例如“Dec”。