9.13.1. CASE
L’expression SQL CASE est une expression conditionnelle générique, similaire aux instructions if/else dans d’autres langages :
CASE WHEN condition THEN result END
Les clauses CASE peuvent être utilisées partout où une expression est valide. condition est une expression qui renvoie un résultat booléen. Si le résultat est vrai, alors la valeur de l’expression CASE est le résultat qui suit la condition. Si le résultat est faux, toutes les clauses WHEN suivantes sont recherchées de la même manière. Si aucune condition WHEN n’est vraie, la valeur de l’expression CASE est le résultat de la clause ELSE. Si la clause ELSE est omise et qu’aucune condition ne correspond, le résultat est nul.
Un exemple:
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
Les types de données de toutes les expressions de résultat doivent être convertibles en un seul type de sortie. Voir la section 10.5 pour plus de détails.
L’expression CASE « simple » suivante est une variante spécialisée de la forme générale ci-dessus:
CASE expression WHEN value THEN result END
L’expression est calculée et comparée à toutes les spécifications de valeur dans les clauses WHEN jusqu’à ce qu’une soit trouvée qui soit égale. Si aucune correspondance n’est trouvée, le résultat dans la clause ELSE (ou une valeur nulle) est retourné. Ceci est similaire à l’instruction switch
en C.
L’exemple ci-dessus peut être écrit en utilisant la syntaxe CASE simple:
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
Une expression CASE n’évalue pas les sous-expressions qui ne sont pas nécessaires pour déterminer le résultat. Par exemple, voici une façon possible d’éviter un échec de division par zéro:
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;
.