2009-02-24 5 views
11

Ich habe folgende Möglichkeiten:SQL Server prüfen IsNull und Zero

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

Wenn @VariableEqualToZero null ersetzt es die 1. Ich brauche es 1 zu ersetzen, wenn @VariableEqualToZero = 0 als auch. Wie mache ich das?

Antwort

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

Sie verwenden CASE

statt

ISNULL(@VariableEqualToZero,1) 

Verwendung

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

COALESCE und ISNULL sind im Wesentlichen nur Abkürzungen für eine CASE-Anweisung. Sie können die Hilfe für die Syntax von CASE konsultieren.

28

Wenn Sie SQL Server verwenden, können Sie wahrscheinlich eine nullif-Anweisung verwenden? (Dh den Wert auf Null gesetzt, wenn es dann 0 auf 1 gesetzt, wenn es null ist - sollten beide fangen für 0'en und NULLs

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

+1 'NULLIF()' ist der Weg zu gehen (und es ist zu Standard-SQL , also wäre ich versucht, 'ISNULL()' durch 'COALESCE()' zu ersetzen :) – onedaywhen