Pergunta

Eu tenho o seguinte:

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

Se @VariableEqualToZero é nulo substitui o 1. eu preciso dele para substituir 1 se @VariableEqualToZero = 0 também. Como eu faço isso?

Foi útil?

Solução

SET @SomeVariable = @AnotherVariable / COALESCE(
        CASE 
             WHEN @VariableEqualToZero = 0 THEN 1
             ELSE @VariableEqualToZero
        END, 1) - 1

Outras dicas

Se você estiver usando SQL Server, provavelmente você pode usar uma instrução NULLIF? (Ou seja, definir o valor como nulo se for 0, em seguida, configurá-lo para 1 se é nula - deve pegar para ambos os 0 e nulos

SET @SomeVariable = @AnotherVariable/ISNULL(NULLIF(@VariableEqualToZero,0),1) - 1
set @SomeVariable = @AnotherVariable /
(case when isnull(@VariableEqualToZero, 0) = 0 then 1 else
@VariableEqualToZero end) - 1

Você usa CASE

em vez de

ISNULL(@VariableEqualToZero,1)

uso

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

COALESCE e ISNULL são essencialmente apenas atalhos para uma instrução CASE. Você pode consultar a ajuda para a sintaxe de CASE.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top