9.13.1. CASE
SQL:s CASE-uttryck är ett generiskt villkorligt uttryck som liknar if/else-satser i andra språk:
CASE WHEN condition THEN result END
CASE-klausuler kan användas överallt där ett uttryck är giltigt. condition är ett uttryck som returnerar ett boolskt resultat. Om resultatet är sant är värdet av CASE-uttrycket det resultat som följer på villkoret. Om resultatet är falskt söks alla efterföljande WHEN-klausuler på samma sätt. Om inget WHEN-villkor är sant är värdet av case-uttrycket resultatet i ELSE-klausulen. Om ELSE-klausulen utelämnas och inget villkor stämmer är resultatet noll.
Ett exempel:
SELECT * FROM test; a--- 1 2 3SELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 'other' END FROM test; a | case---+------- 1 | one 2 | two 3 | other
Datatyperna för alla resultatuttryck måste kunna konverteras till en enda utdatatyp. Se avsnitt 10.5 för mer information.
Följande ”enkla” CASE-uttryck är en specialiserad variant av den allmänna formen ovan:
CASE expression WHEN value THEN result END
Uttrycket beräknas och jämförs med alla värdespecifikationer i WHEN-klausulerna tills man hittar ett som är lika. Om ingen överensstämmelse hittas returneras resultatet i ELSE-klausulen (eller ett nollvärde). Detta liknar switch
-anvisningen i C.
Exemplet ovan kan skrivas med hjälp av den enkla CASE-syntaxen:
SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END FROM test; a | case---+------- 1 | one 2 | two 3 | other
Ett CASE-uttryck utvärderar inte några deluttryck som inte behövs för att bestämma resultatet. Det här är till exempel ett möjligt sätt att undvika ett fel vid division genom noll:
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;