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;

Lämna ett svar

Din e-postadress kommer inte publiceras.