SQL Server - CASE в рамках CASE, проверка на NULL - PullRequest
3 голосов
/ 03 июля 2010

Я все еще изучаю 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

Ответы [ 2 ]

3 голосов
/ 03 июля 2010

Set @Result = Left (DateName (m, @ FN_InputDt), 3)

Преобразует месяц в имя и отображает только первые 3 символа.

3 голосов
/ 03 июля 2010

Если @FN_InputDt равно нулю, то @MonthNo также будет равно нулю, поэтому вы можете просто пропустить проверку, если @FN_InputDt равно нулю.

Вы можете пропустить другой случай, просто используя @MonthNo в качестве индекса для выборачасть строки:

set @Result = substring(
  'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC',
  @MonthNo * 3 - 2,
  3
)

Если @MonthNo равен нулю, @Result также будет равен нулю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...