2009-02-24 12 views
11

Tengo el siguiente:EsNulo y para Zero

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

Si @VariableEqualToZero es nulo sustituye el 1. Lo necesito para sustituir a 1 si @VariableEqualToZero = 0 también. ¿Cómo hago esto?

Respuesta

9
SET @SomeVariable = @AnotherVariable/COALESCE(
     CASE 
      WHEN @VariableEqualToZero = 0 THEN 1 
      ELSE @VariableEqualToZero 
     END, 1) - 1 
2
set @SomeVariable = @AnotherVariable/
(case when isnull(@VariableEqualToZero, 0) = 0 then 1 else 
@VariableEqualToZero end) - 1 
2

Usted caso de uso

en lugar de

ISNULL(@VariableEqualToZero,1) 

uso

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

unirse y ISNULL son esencialmente sólo atajos para una instrucción CASE. Puede consultar la ayuda para obtener la sintaxis de CASE.

28

Si está utilizando SQL Server, probablemente pueda utilizar una declaración nullif? (Es decir, ajustar el valor en null si es 0, entonces ajusta a 1 si es nulo - debe ponerse tanto para 0 y los nulos

SET @SomeVariable = @AnotherVariable/ISNULL(NULLIF(@VariableEqualToZero,0),1) - 1 
+0

1 'NULLIF()' es el camino a seguir (y es estándar SQL demasiado , así que estaría tentado de reemplazar 'ISNULL()' con 'COALESCE()' :) – onedaywhen

Cuestiones relacionadas