CASE ist eine komplexe Funktion, für die es zwei Formen gibt: die einfache WHEN-Form und die WHEN-Suchform. In beiden Formen gibt CASE einen Wert zurück, dessen Ergebnis den Pfad der nachfolgenden Verarbeitung steuert.
Beide Formen von CASE geben einen Wert zurück, der von Regeln abhängt, die in WHEN-Klauseln definiert werden.
In der einfachen WHEN-Form wird Quellenwert mit jedem Testwert verglichen, bis eine Übereinstimmung gefunden wird. Das Ergebnis der CASE-Funktion ist der Wert des entsprechenden Ergebniswerts. Der Datentyp von Quellenwert muss deshalb mit dem Datentyp der einzelnen Testwerte vergleichbar sein.
In der CASE-Funktion muss mindestens ein WHEN-Ausdruck angegeben werden. Der ELSE-Ausdruck ist optional. Der ELSE-Standardausdruck ist NULL. Ein CASE-Ausdruck wird durch END begrenzt. Bei den Testwerten muss es sich nicht um Literalwerte handeln.
Die WHEN-Suchklausel ist der einfachen Form ähnlich, sie ist jedoch flexibler, da mehrere verschiedene Werte gestestet werden können.
DECLARE CurrentMonth CHAR; DECLARE MonthText CHAR; SET CurrentMonth = SUBSTRING(InputBody.Invoice.InvoiceDate FROM 6 FOR 2); SET MonthText = CASE CurrentMonth WHEN '01' THEN 'January' WHEN '02' THEN 'February' WHEN '03' THEN 'March' WHEN '04' THEN 'April' WHEN '05' THEN 'May' WHEN '06' THEN 'June' ELSE 'Second half of year' END
DECLARE CurrentMonth CHAR; DECLARE MonthText CHAR; SET CurrentMonth = SUBSTRING(InputBody.Invoice.InvoiceDate FROM 6 FOR 2); SET MonthText = CASE WHEN Month = '01' THEN 'January' WHEN Month = '02' THEN 'February' WHEN Month = '03' THEN 'March' WHEN Month = '04' THEN 'April' WHEN Month = '05' THEN 'May' WHEN Month = '06' THEN 'June' ELSE 'Second half of year' END
DECLARE CurrentMonth CHAR; DECLARE CurrentYear CHAR; DECLARE MonthText CHAR; SET CurrentMonth = SUBSTRING(InputBody.Invoice.InvoiceDate FROM 6 FOR 2); SET CurrentYear = SUBSTRING(InputBody.Invoice.InvoiceDate FROM 1 FOR 4); SET MonthText = CASE WHEN CurrentMonth = '01' THEN 'January' WHEN CurrentMonth = '02' THEN 'February' WHEN CurrentMonth = '03' THEN 'March' WHEN CurrentYear = '2000' THEN 'A month in the Year 2000' WHEN CurrentYear = '2001' THEN 'A month in the Year 2001' ELSE 'Not first three months of any year or a month in the Year 2000 or 2001' END;