2009-12-19 2 views
0

Я объявил переменную @dateКак я могу переписать это заявление?

SELECT @date = CASE 
     WHEN MAX(dt) IS NULL THEN '31/12/2009' 
     ELSE MAX(dt) + 1 
    END 
    FROM mytab 

фрагмент кода, где я использую локальную переменную

CASE 
    WHEN MAX(DateValue)= @date THEN NULL 
    ELSE CONVERT(varchar(10), CONVERT(datetime, MAX(DateValue)), 103) 
END AS newdt 

Я не хочу использовать @date локальную переменную в сазе, но хотите получить тот же эффект. Я пробовал:

CASE 
    WHEN MAX(DateValue)= @isnull(dt, '31/12/2009') 
    ELSE CONVERT(varchar(10), CONVERT(datetime, MAX(DateValue)), 103) 
END AS newdt 

, но получите сообщение об ошибке. Любая идея избавиться от этого?

ответ

1

ОК, во-первых, вам нужно использовать

ISNULL(dt, '31/12/2009') 

Без @.

Во-вторых, вам нужно будет предоставить более полный запрос для проверки. Также укажите ошибку, которую вы получаете.

Вы также можете указать исходный выбор во втором выборе. Что-то вроде этого:

CASE 
    WHEN MAX(DateValue)= (SELECT CASE WHEN MAX(dt) IS NULL THEN '31/12/2009' ELSE MAX(dt) + 1 END FROM mytab) 
    ELSE CONVERT(varchar(10), CONVERT(datetime, MAX(DateValue)), 103) 
END AS newdt 
0
CASE 
    WHEN MAX(DateValue)= isnull(dt, '31/12/2009') 
    ELSE CONVERT(varchar(10), CONVERT(datetime, MAX(DateValue)), 103) 
END AS newdt 
Смежные вопросы