Expressions conditionnelles

Cette section décrit les expressions conditionnelles conformes au SQL disponible dans Postgres.

Tip

Si vous avez besoin d'aller plus loin dans les possibilités de ces expressions conditionnelles, vous aurez à écrire une procédure stockée dans un langage de programmation plus expressif.

CASE

CASE WHEN condition THEN result
     [WHEN ...]
     [ELSE result]
END

L'expression SQL CASE est une expression conditionnelle générique, similaire aux états if/else dans d'autres langages. Les clauses CASE peuvent être utilisées n'importe où dans une expression valide. condition est une expression qui renvoit un résultat booléen. Si le résultat est à true alors la valeur de l'expression CASE est result. Si le résultat est à false des clauses WHEN seront recherchées de la même manière. Si aucune condition condition WHEN est à true la valeur de l'expression est result dans la clause ELSE. Si la clause ELSE est omise et aucune condition identique, le résultat est NULL.

Un exemple:

=> SELECT * FROM test;
 a
---
 1
 2
 3

=> SELECT 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 toutes les expressions result doivent être coercibles à un type unique en sortie. Voir the section called Constructions UNION et CASE in the chapter called Conversion de type pour plus de détails.

CASE expression
    WHEN value THEN result
    [WHEN ...]
    [ELSE result]
END

Cette expression CASE "simple" est une variante spécialisée de la forme générale. L'expression est calculée et comparée à toutes les valeurs des clauses WHEN jusqu'à ce qu'une valeur égale soit trouvée. Si aucune égalité est trouvée le résultat de la clause (ou NULL)ELSE est retourné. Ceci est similaire à l'état switch en C.

L'exemple au dessus peut être écrit en utilisant la syntaxe CASE :

=> 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

COALESCE

COALESCE(value[, ...])

La fonction COALESCE renvoit le premier de ses arguments qui est non NULL. C'est souvent pratique pour substituer une valeur par défaut aux valeurs NULL quand la donnée est récupérée pour affichage, par exemple :

SELECT COALESCE(description, short_description, '(none)') ...

NULLIF

NULLIF(value1, value2)

La fonction NULLIF renvoit NULL si et seulement si value1 et value2 sont égales. Autrement elle renvoit value1. eci peut être utilisé pour effectuer l'opération inverse de l'exemple COALESCE ci-dessous :

SELECT NULLIF(value, '(none)') ...

Tip

COALESCE et NULLIF sont simplement des écritures sténo pour les expressions CASE. Elles sont actuellement converties en expressions CASE à un stade de traitement proche du début, et les processus sous-jacents supposent qu'il négocie avec CASE. Ainsi un COALESCE incorrect ou une utilisation de NULLIF peut renvoyer un message se référant à CASE.