FirebirdSQL logo

CASE

Disponible en

DSQL, ESQL.

L’opérateur CASE ne renvoie qu’une seule valeur parmi plusieurs possibles.Il existe deux variantes de syntaxe :

  • Un simple CASE, comparable à Pascal case ou C switch ;

  • Une CASE interrogeable qui fonctionne comme une série d’opérateurs if …​ sinon si …​ sinon si .

Simple CASE
Syntaxe
CASE <test-expr>
  WHEN <expr> THEN <result>
  [WHEN <expr> THEN <result> ...]
  [ELSE <defaultresult>]
END

Avec cette variante, la test-expr est comparée à la première expr,puis le deuxième expr, et ainsi de suite,jusqu’à ce qu’une correspondance soit trouvée, auquel cas le résultat correspondant est renvoyé.Si aucune correspondance n’est trouvée, le résultat par défaut de la branche ELSE est retourné.S’il n’y a pas de correspondance et que la branche ELSE est manquante, il retourne NULL.

Une correspondance est équivalente à l’opérateur “=”, c’est-à-dire queSi test-expr a la valeur NULL, alors il ne correspond à aucune des expr, même celles qui ont la valeur NULL.

Les résultats ne doivent pas nécessairement être des valeurs littérales, ils peuvent aussi être des noms de champs, des variables, des expressions complexes ou des NULL.

Example 1. En utilisant un simple CASE
SELECT
  NAME,
  AGE,
  CASE UPPER(SEX)
    WHEN 'M' THEN 'Male'
    WHEN 'F' THEN 'Female'
    ELSE 'Unknown'
  END AS SEXNAME,
  RELIGION
FROM PEOPLE

Une forme abrégée de l’opérateur CASE simple est utilisée dans la fonction DECODE.

Recherche CASE
Syntaxe
CASE
  WHEN <bool_expr> THEN <result>
  [WHEN <bool_expr> THEN <result> …]
  [ELSE <defaultresult>]
END

Ici <bool_expr> est une expression qui donne un triple résultat logique : TRUE, FALSE ou NULL.La première expression qui retourne TRUE définit le résultat.Si aucune expression ne retourne TRUE, le résultat par défaut de la branche ELSE est pris comme résultat.Si aucune expression ne retourne TRUE et qu’il n’y a pas de branche ELSE, le résultat est NULL.

Comme avec l’instruction simple CASE, les résultats ne doivent pas nécessairement être des valeurs littérales : ils peuvent être des champs ou des noms de variables, des expressions complexes ou NULL.

Example 1. Utilisation d’un moteur de recherche CASE
CANVOTE = CASE
  WHEN AGE >= 18 THEN 'Yes'
  WHEN AGE < 18 THEN 'No'
  ELSE 'Unsure'
END;

En termes de NULL

NULL n’est pas une valeur — c’est un état indiquant que la valeur de l’élément est inconnue ou n’existe pas.Ce n’est pas zéro, ni void, ni `chaîne vide', et il ne se comporte pas comme l’une de ces valeurs.

Lorsque vous utilisez NULL dans des expressions numériques, de chaîne de caractères ou de date/heure, vous obtenez toujours NULL.Lorsque vous utilisez NULL dans des expressions logiques (booléennes), le résultat dépendra du type d’opération et des autres valeurs impliquées.Si vous comparez une valeur à NULL, le résultat sera indéfini (UNKNOWN).

Important

Le résultat logique indéfini UNKNOWN est également représenté par la pseudo-valeur NULL.