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 ein Ergebnis zurück, dessen Wert den Pfad der nachfolgenden Verarbeitung steuert.
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 eine WHEN-Klausel 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-Suchform 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;