9.13.1. CASE

SQL CASE-udtrykket er et generisk betinget udtryk, svarende til if/else-udsagn i andre sprog:

CASE WHEN condition THEN result END

CASE-klausuler kan bruges overalt, hvor et udtryk er gyldigt. betingelse er et udtryk, der returnerer et boolsk resultat. Hvis resultatet er sandt, er værdien af CASE-udtrykket det resultat, der følger efter betingelsen. Hvis resultatet er falsk, søges der i alle efterfølgende WHEN-klausuler på samme måde. Hvis ingen WHEN-betingelse er sand, er værdien af case-udtrykket resultatet i ELSE-klausulen. Hvis ELSE-klausulen er udeladt, og ingen betingelse passer, er resultatet nul.

Eksempel:

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

Datatyperne for alle resultatudtrykkene skal kunne konverteres til en enkelt udgangstype. Se afsnit 10.5 for yderligere oplysninger.

Det følgende “enkle” CASE-udtryk er en specialiseret variant af den generelle form ovenfor:

CASE expression WHEN value THEN result END

Udtrykket beregnes og sammenlignes med alle værdiangivelserne i WHEN-klausulerne, indtil der findes en, der er lig med. Hvis der ikke findes nogen overensstemmelse, returneres resultatet i ELSE-klausulen (eller en nulværdi). Dette svarer til switch-erklæringen i C.

Eksemplet ovenfor kan skrives ved hjælp af den simple CASE-syntaks:

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

Et CASE-udtryk evaluerer ikke nogen underudtryk, der ikke er nødvendige for at bestemme resultatet. Dette er f.eks. en mulig måde at undgå en fejl ved division ved nul:

SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.