Vue d’ensemble
Utiliser directement les résultats conditionnels
0, 1 ou NULL. Vous pouvez donc utiliser directement ces résultats, comme ceci :
Valeurs NULL dans les expressions conditionnelles
NULL entrent en jeu dans des expressions conditionnelles, le résultat est également NULL.
Nullable.
L’exemple suivant l’illustre en omettant d’ajouter une condition equals à multiIf.
Instruction CASE
CASE WHEN ... THEN ... ELSE ... END
Cette forme offre une flexibilité totale et est implémentée en interne à l’aide de la fonction multiIf. Chaque condition est évaluée indépendamment, et les expressions peuvent inclure des valeurs non constantes.
CASE <expr> WHEN <val1> THEN ... WHEN <val2> THEN ... ELSE ... END
Cette forme plus compacte est optimisée pour la mise en correspondance de valeurs constantes et utilise en internecaseWithExpression().
Mises en garde
multiIf) avant d’évaluer les conditions. C’est important lorsque les expressions renvoyées sont de types différents, par exemple avec des fuseaux horaires ou des types numériques distincts.
- Le type de résultat est choisi en fonction du plus grand type compatible parmi toutes les branches.
- Une fois ce type choisi, toutes les autres branches y sont converties implicitement, même si leur logique ne serait jamais exécutée au runtime.
- Pour des types comme DateTime64, où le fuseau horaire fait partie de la signature du type, cela peut entraîner un comportement surprenant : le premier fuseau horaire rencontré peut être utilisé pour toutes les branches, même lorsque d’autres branches spécifient des fuseaux horaires différents.
Asia/Kolkata
DateTime64(3, <timezone>). Il déduit que le type commun est DateTime64(3, 'Asia/Kolkata', car c’est le premier qu’il rencontre, et convertit implicitement les autres branches vers ce type.
On peut résoudre ce problème en convertissant en chaîne de caractères afin de préserver le formatage souhaité du fuseau horaire :
clamp
value— La valeur à borner. -min— La borne minimale. -max— La borne maximale.
Query
Response
Query
Response
Query
Response
greatest
NULL sont ignorés.
- Pour les tableaux, renvoie le plus grand tableau au sens lexicographique.
- Pour les types
DateTime, le type de résultat est promu au type le plus large (par ex.DateTime64en combinaison avecDateTime32).
Utilisez le paramètre
least_greatest_legacy_null_behavior pour modifier le comportement de NULLLa version 24.12 a introduit un changement non rétrocompatible : les valeurs NULL sont désormais ignorées, alors qu’auparavant la fonction renvoyait NULL si l’un des arguments était NULL.
Pour conserver le comportement précédent, définissez le paramètre least_greatest_legacy_null_behavior (par défaut : false) sur true.x1[, x2, ...]— Une ou plusieurs valeurs à comparer. Tous les arguments doivent être de types comparables.Any
Any
Exemples
Types numériques
Query
Response
Query
Response
Query
Response
if
- Si la condition
conds’évalue à une valeur non nulle, la fonction renvoie le résultat de l’expressionthen. - Si
conds’évalue à zéro ou à NULL, le résultat de l’expressionelseest renvoyé.
short_circuit_function_evaluation détermine si l’évaluation en court-circuit est utilisée.
S’il est activé, l’expression then n’est évaluée que sur les lignes où cond est true, et l’expression else sur celles où cond est false.
Par exemple, avec l’évaluation en court-circuit, aucune exception de division par zéro n’est levée lors de l’exécution de la requête suivante :
then et else doivent être de type similaire.
Syntaxe
cond— La condition évaluée.UInt8ouNullable(UInt8)ouNULLthen— L’expression renvoyée sicondesttrue. -else— L’expression renvoyée sicondestfalseouNULL.
then ou else, selon la condition cond.
Exemples
Exemple d’utilisation
Query
Response
least
NULL sont ignorés.
- Pour les tableaux, renvoie le tableau le plus petit selon l’ordre lexicographique.
- Pour les types DateTime, le type de résultat est promu au type le plus large (par ex. DateTime64 s’il est mélangé à DateTime32).
Utilisez le paramètre
least_greatest_legacy_null_behavior pour modifier le comportement de NULLLa version 24.12 a introduit un changement rétro-incompatible : les valeurs NULL sont désormais ignorées, alors qu’auparavant la fonction renvoyait NULL si l’un des arguments était NULL.
Pour conserver le comportement précédent, définissez le paramètre least_greatest_legacy_null_behavior (par défaut : false) sur true.x1[, x2, ...]— Une seule valeur ou plusieurs valeurs à comparer. Tous les arguments doivent être de types comparables.Any
Any
Exemples
Types numériques
Query
Response
Query
Response
Query
Response
multiIf
CASE de manière plus compacte dans la requête.
Évalue chaque condition dans l’ordre. Pour la première condition qui est vraie (non égale à zéro et différente de NULL), renvoie la valeur correspondante.
Si aucune des conditions n’est vraie, renvoie la valeur else.
Le paramètre short_circuit_function_evaluation contrôle
si l’évaluation en court-circuit est utilisée. S’il est activé, l’expression then_i est évaluée uniquement sur les lignes où
((NOT cond_1) AND ... AND (NOT cond_{i-1}) AND cond_i) est vraie.
Par exemple, avec l’évaluation en court-circuit, aucune exception de division par zéro n’est levée lors de l’exécution de la requête suivante :
else doivent avoir un supertype commun. Les conditions NULL sont considérées comme false.
Syntaxe
caseWithoutExpression, caseWithoutExpr
Arguments
cond_N— La N-ième condition évaluée, qui détermine sithen_Nest renvoyé.UInt8ouNullable(UInt8)ouNULLthen_N— Le résultat de la fonction lorsquecond_Nesttrue. -else— Le résultat de la fonction si aucune des conditions n’esttrue.
then_N pour le cond_N correspondant, sinon renvoie la valeur else.
Exemples
Exemple d’utilisation
Query
Response