Проверка SQL Server для IsNull и для нуля - PullRequest
11 голосов
/ 24 февраля 2009

У меня есть следующее:

set @SomeVariable = @AnotherVariable/isnull(@VariableEqualToZero,1) - 1 

Если @VariableEqualToZero равен нулю, он заменяет 1. Мне нужно заменить 1, если @VariableEqualToZero = 0. Как мне это сделать?

Ответы [ 4 ]

32 голосов
/ 11 октября 2011

Если вы используете SQL Server, возможно, вы можете использовать нулевой оператор? (т. е. установить значение в ноль, если оно равно 0, затем установить его в 1, если оно равно нулю - должно быть как для 0, так и для NULL

SET @SomeVariable = @AnotherVariable/ISNULL(NULLIF(@VariableEqualToZero,0),1) - 1
11 голосов
/ 24 февраля 2009
SET @SomeVariable = @AnotherVariable / COALESCE(
        CASE 
             WHEN @VariableEqualToZero = 0 THEN 1
             ELSE @VariableEqualToZero
        END, 1) - 1
2 голосов
/ 24 февраля 2009

Вы используете CASE

вместо

ISNULL(@VariableEqualToZero,1)

использование

CASE WHEN @VariableEqualToZero IS NULL OR @VariableEqualToZero = 0 THEN 1 ELSE @VariableEqualToZero END

COALESCE и ISNULL - это просто ярлыки для оператора CASE. Вы можете обратиться за помощью к синтаксису CASE.

2 голосов
/ 24 февраля 2009
set @SomeVariable = @AnotherVariable /
(case when isnull(@VariableEqualToZero, 0) = 0 then 1 else
@VariableEqualToZero end) - 1
...