Documentation PostgreSQL 7.4.29 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Chapitre 9. Fonctions et opérateurs | Avance rapide | Suivant |
Cette section décrit les expressions conditionnelles respectant le standard SQL disponibles avec PostgreSQL.
Astuce : Si vos besoins dépassent les possibilités des expressions conditionnelles, vous devez considérer l'écriture d'une procédure stockée dans un langage de programmation plus expressif.
L'expression SQL CASE est une expression conditionnelle générique, similaire aux instructions if/else statements des autres langages :
CASE WHEN condition THEN résultat [WHEN ...] [ELSE résultat] END
Les clauses CASE peuvent être utilisées partout où une expression est valide. condition est une expression qui renvoie un résultat boolean. 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, toute clause WHEN suivante est recherchée de la même façon. Si la condition WHEN est fausse, alors la valeur de l'expression est le résultat de la clause ELSE. Si la clause ELSE est omise et qu'aucune condition ne correspond, alors le résultat est nul.
Un exemple :
SELECT * FROM test; a --- 1 2 3 SELECT a, CASE WHEN a=1 THEN 'un' WHEN a=2 THEN 'deux' ELSE 'autres' END FROM test; a | case ---+------- 1 | un 2 | deux 3 | autres
Les types de données de toutes les expressions résultat doivent être convertibles dans un même type de sortie. Voir Section 10.5 pour plus de détails.
La << simple >> expression CASE suivante est une variante spécialisée de la forme générale ci-dessus :
CASE expression WHEN valeur THEN résultat [WHEN ...] [ELSE résultat] END
L'expression est calculée et comparée à toutes
les spécifications de valeur des clauses
WHEN jusqu'à en trouver une. Si aucune ne correspond, le
résultat dans la clause
ELSE (ou une valeur nulle) est renvoyée. Ceci est similaire
à l'instruction switch
en C.
L'exemple ci-dessus peut être réécrit en utilisant la syntaxe CASE simple :
SELECT a, CASE a WHEN 1 THEN 'un' WHEN 2 THEN 'deux' ELSE 'autres' END FROM test; a | case ---+------- 1 | un 2 | deux 3 | autres
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 une division par zéro :
SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;
COALESCE
(valeur [,
...])
La fonction COALESCE
renvoie le premier de ces
arguments qui n'est pas nul. Une valeur nulle est renvoyée seulement si tous
les arguments sont nuls. Ceci est souvent utile pour substituer une valeur
par défaut pour les valeurs nulles lorsque la donnée est récupérée pour
affichage. Par exemple :
SELECT COALESCE(description, short_description, '(none)') ...
Comme une expression CASE, COALESCE
n'évaluera pas les arguments non nécessaires à la détermination du
résultat ; c'est-à-dire que tous les arguments à la droite du premier
argument non nul ne sont pas évalués.
NULLIF
(valeur1,
valeur2)
La fonction NULLIF
renvoie une valeur nulle si et
seulement si valeur1 et
valeur2 sont égales. Sinon, il renvoie
valeur1. Ceci est réalisé pour disposer de
l'opération inverse de l'exemple de COALESCE
donné
ci-dessus :
SELECT NULLIF(value, '(none)') ...
Précédent | Sommaire | Suivant |
Fonctions de manipulation de séquence | Niveau supérieur | Fonctions diverses |