Opérateurs d’accès
a[N] – Accès à un élément d’un tableau. Fonction arrayElement(a, N).
a.N – Accès à un élément d’un tuple. Fonction tupleElement(a, N).
Opérateur de négation numérique
-a – La fonction negate (a).
Pour la négation d’un Tuple : tupleNegate.
Opérateurs de multiplication et de division
a * b – La fonction multiply (a, b).
Pour multiplier un Tuple par un nombre : tupleMultiplyByNumber ; pour le produit scalaire : dotProduct.
a / b – La fonction divide(a, b).
Pour diviser un Tuple par un nombre : tupleDivideByNumber.
a % b – La fonction modulo(a, b).
Opérateurs d’addition et de soustraction
a + b – La fonction plus(a, b).
Pour l’addition de tuples : tuplePlus.
a - b – La fonction minus(a, b).
Pour la soustraction de tuples : tupleMinus.
Opérateurs de comparaison
fonction equals
a = b – La fonction equals(a, b).
a == b – La fonction equals(a, b).
fonction notEquals
a != b – la fonction notEquals(a, b).
a <> b – la fonction notEquals(a, b).
fonction lessOrEquals
a <= b – La fonction lessOrEquals(a, b).
fonction greaterOrEquals
a >= b – La fonction greaterOrEquals(a, b).
fonction less
a < b – La fonction less(a, b).
fonction greater
a > b – La fonction greater(a, b).
fonction like
a LIKE b – La fonction like(a, b).
fonction notLike
a NOT LIKE b – La fonction notLike(a, b).
fonction ilike
a ILIKE b – La fonction ilike(a, b).
Fonction BETWEEN
a BETWEEN b AND c – Identique à a >= b AND a <= c.
a NOT BETWEEN b AND c – Identique à a < b OR a > c.
opérateur IS NOT DISTINCT FROM (<=>)
À partir de la version 25.10, vous pouvez utiliser
<=> comme n’importe quel autre opérateur.
Avant la version 25.10, il ne pouvait être utilisé que dans des expressions JOIN, par exemple :<=> est l’opérateur d’égalité compatible avec NULL, équivalent à IS NOT DISTINCT FROM.
Il fonctionne comme l’opérateur d’égalité classique (=), mais considère les valeurs NULL comme comparables.
Deux valeurs NULL sont considérées comme égales, et une valeur NULL comparée à n’importe quelle valeur non NULL renvoie 0 (false) plutôt que NULL.
Opérateurs pour travailler avec les chaînes de caractères
OVERLAY
OVERLAY(string PLACING replacement FROM offset)- La fonctionoverlay(string, replacement, offset).OVERLAY(string PLACING replacement FROM offset FOR length)- La fonctionoverlay(string, replacement, offset, length).OVERLAYUTF8(string PLACING replacement FROM offset)- La fonctionoverlayUTF8(string, replacement, offset).OVERLAYUTF8(string PLACING replacement FROM offset FOR length)- La fonctionoverlayUTF8(string, replacement, offset, length).
Opérateurs pour manipuler des ensembles de données
fonction IN
a IN ... – La fonction in(a, b).
fonction notIn
a NOT IN ... – La fonction notIn(a, b).
fonction globalIn
a GLOBAL IN ... – La fonction globalIn(a, b).
fonction globalNotIn
a GLOBAL NOT IN ... – La fonction globalNotIn(a, b).
fonction in avec sous-requête
a = ANY (subquery) – La fonction in(a, subquery).
notIn sous-requête function
a != ANY (subquery) – Équivaut à a NOT IN (SELECT singleValueOrNull(*) FROM subquery).
Fonction in sous-requête
a = ALL (subquery) – Identique à a IN (SELECT singleValueOrNull(*) FROM subquery).
fonction de sous-requête notIn
a != ALL (subquery) – La fonction notIn(a, subquery).
Exemples
Requête avec ALL :
Query
Response
Query
Response
SOME / ALL sur les tableaux
SOME / ALL peut être une expression de tableau (un littéral de tableau, une colonne de type tableau ou toute expression renvoyant un tableau). Il s’agit de la syntaxe de quantificateur de tableau de style PostgreSQL. Elle est reconnue lors de l’analyse syntaxique et réécrite en fonctions de tableau, donc aucune réécriture manuelle n’est nécessaire :
| Syntaxe | Réécrit en |
|---|---|
expr = SOME(arr) | has(arr, expr) |
expr <> ALL(arr) | NOT has(arr, expr) |
expr OP SOME(arr) (tout autre opérateur de comparaison) | arrayExists(x -> expr OP x, arr) |
expr OP ALL(arr) (tout autre opérateur de comparaison) | arrayAll(x -> expr OP x, arr) |
SOME est le quantificateur existentiel (le synonyme SQL de ANY). = et <> sont traités à part et réécrits en has / NOT has, car ils disposent d’une implémentation optimisée ; la forme générale s’appuie sur les fonctions d’ordre supérieur arrayExists / arrayAll.
La forme tableau n’est reconnue que pour les opérateurs de comparaison =, ==, !=, <>, <=>, <, <=, >, et >=. Les autres opérateurs qui acceptent un tableau à droite — par exemple LIKE, ILIKE, NOT LIKE, REGEXP et IN — ne sont pas réécrits en quantificateur de tableau et conservent leur sens habituel. Par exemple, 'abc' LIKE SOME(['a%', 'b%']) n’est pas une syntaxe de quantificateur de tableau ; utilisez directement arrayExists / arrayAll dans ces cas.
ANY n’est pas pris en charge pour la forme tableauSeuls SOME et ALL acceptent un tableau à droite. ANY est exclu, car any est aussi une fonction d’agrégation ; une expression de la forme expr = any(x) conserve donc son sens d’appel de fonction. Utilisez SOME pour le quantificateur de tableau.Query
Response
La gestion de
NULL diffère de celle de la forme avec sous-requêteComme la forme avec tableau est réécrite par le parseur (où les paramètres de requête tels que transform_null_in ne sont pas disponibles, et où une colonne de tableau propre à chaque ligne ne peut pas utiliser le chemin IN de l’analyseur avec gestion sûre de NULL), elle s’appuie sur la sémantique bivalente de has (pour = / <>) et de arrayExists / arrayAll (qui convertissent en 0 un résultat de comparaison NULL inconnu). Cela peut différer de la forme avec sous-requête, dont la gestion de NULL est ramenée à IN / NOT IN et dépend de transform_null_in :Opérateurs pour manipuler les dates et heures
EXTRACT
part spécifie quelle composante de la date récupérer. Les valeurs suivantes sont disponibles :
NANOSECOND— La nanoseconde. Valeurs possibles : 0–999999999.MICROSECOND— La microseconde. Valeurs possibles : 0–999999.MILLISECOND— La milliseconde. Valeurs possibles : 0–999.SECOND— La seconde. Valeurs possibles : 0–59.MINUTE— La minute. Valeurs possibles : 0–59.HOUR— L’heure. Valeurs possibles : 0–23.DAY— Le jour du mois. Valeurs possibles : 1–31.WEEK— Le numéro de semaine ISO 8601. Valeurs possibles : 1–53.MONTH— Le numéro du mois. Valeurs possibles : 1–12.QUARTER— Le trimestre. Valeurs possibles : 1–4.YEAR— L’année.EPOCH— Le timestamp Unix (secondes écoulées depuis 1970-01-01 00:00:00 UTC). Remarque : pourDateTime64, la partie sous-seconde est tronquée.DOW— Le jour de la semaine (compatible PostgreSQL). 0 = dimanche, 6 = samedi.DOY— Le jour de l’année. Valeurs possibles : 1–366.ISODOW— Le jour ISO de la semaine. 1 = lundi, 7 = dimanche.ISOYEAR— L’année de numérotation des semaines ISO 8601.CENTURY— Le siècle. Par exemple, l’année 2024 appartient au XXIe siècle.DECADE— La décennie (année divisée par 10). Par exemple, l’année 2024 a pour décennie 202.MILLENNIUM— Le millénaire. Par exemple, l’année 2024 appartient au IIIe millénaire.TIMEZONE_HOUR— La partie heure signée du décalage UTC du fuseau horaire de l’opérande. Par exemple,+5:30renvoie5,-3:30renvoie-3.TIMEZONE_MINUTE— La partie minute signée du décalage UTC du fuseau horaire de l’opérande. Par exemple,+5:30renvoie30,-3:30renvoie-30.
part n’est pas sensible à la casse.
Le paramètre date spécifie la valeur à traiter. Les types Date, Date32, DateTime, DateTime64 et Interval sont pris en charge. Lorsque date est un Interval, la part demandée doit correspondre à l’unité stockée par l’intervalle (par exemple, EXTRACT(DAY FROM INTERVAL 5 DAY) est autorisé ; EXTRACT(HOUR FROM INTERVAL 5 DAY) est rejeté, car les intervalles ClickHouse ne stockent qu’un seul type d’unité). Le résultat pour un opérande Interval est Int64.
Exemples :
DateTime.
INTERVAL
SECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
INTERVAL. Par exemple, INTERVAL 1 HOUR est identique à INTERVAL '1 hour' ou INTERVAL '1' hour.
Exemples :
La syntaxe
INTERVAL ou la fonction addDays sont toujours à privilégier. Une simple addition ou soustraction (syntaxe du type now() + ...) ne tient pas compte des paramètres de temps. Par exemple, de l’heure d’été.- Interval type de données
- toInterval fonctions de conversion de type
Addition de date et d’heure
+. Le résultat est un DateTime ou un DateTime64 représentant cette date à l’heure indiquée. L’opération est commutative.
Le type de résultat dépend des types des opérandes :
| Opérande de gauche | Opérande de droite | Type de résultat |
|---|---|---|
Date | Time | DateTime |
Date | Time64(s) | DateTime64(s) |
Date32 | Time | DateTime64(0) |
Date32 | Time64(s) | DateTime64(s) |
Le résultat utilise le fuseau horaire de session (ou le fuseau horaire par défaut du serveur si aucun fuseau horaire de session n’est défini). Le paramètre
date_time_overflow_behavior contrôle ce qui se passe lorsque le résultat sort de la plage représentable.Opérateur logique AND
SELECT a AND b — effectue la conjonction logique de a et b à l’aide de la fonction and.
Opérateur logique OR
SELECT a OR b — calcule la disjonction logique de a et b à l’aide de la fonction or.
Opérateur de négation logique
SELECT NOT a — renvoie la négation logique de a à l’aide de la fonction not.
Opérateur conditionnel
a ? b : c – La fonction if(a, b, c).
Remarque :
L’opérateur conditionnel évalue les valeurs de b et de c, vérifie ensuite si la condition a est vraie, puis renvoie la valeur correspondante. Si b ou C est une fonction arrayJoin(), chaque ligne sera dupliquée quelle que soit la condition « a ».
Expression conditionnelle
x est spécifié, la fonction transform(x, [a, ...], [b, ...], c) est utilisée. Sinon, multiIf(a, b, ..., c).
S’il n’y a pas de clause ELSE c dans l’expression, la valeur par défaut est NULL.
La fonction transform ne fonctionne pas avec NULL.
Opérateur de concaténation
s1 || s2 – La fonction concat(s1, s2).
Opérateur de création de lambda
x -> expr – La fonction lambda(x, expr).
Les opérateurs suivants n’ont pas de priorité, car il s’agit de parenthèses :
Opérateur de création de tableau
[x1, ...] – La fonction array(x1, ...).
Opérateur de création de Tuple
(x1, x2, ...) – La fonction tuple(x2, x2, ...).
Associativité
1 + 2 + 3 est transformé en plus(plus(1, 2), 3).
Il arrive parfois que cela ne fonctionne pas comme prévu. Par exemple, SELECT 4 > 2 > 3 renverra 0.
Pour des raisons d’efficacité, les fonctions and et or acceptent un nombre quelconque d’arguments. Les suites correspondantes d’opérateurs AND et OR sont transformées en un unique appel à ces fonctions.
Vérifier NULL
IS NULL et IS NOT NULL.
IS NULL
- Pour les valeurs de type Nullable, l’opérateur
IS NULLrenvoie :1si la valeur estNULL.0sinon.
- Pour les autres valeurs, l’opérateur
IS NULLrenvoie toujours0.
optimize_functions_to_subcolumns = 1, la fonction lit uniquement la sous-colonne null, au lieu de lire et de traiter l’ensemble des données de la colonne. La requête SELECT n IS NULL FROM table est transformée en SELECT n.null FROM TABLE.
IS NOT NULL
- Pour les valeurs du type Nullable, l’opérateur
IS NOT NULLrenvoie :0si la valeur estNULL.1dans le cas contraire.
- Pour toutes les autres valeurs, l’opérateur
IS NOT NULLrenvoie toujours1.
optimize_functions_to_subcolumns = 1, la fonction lit uniquement la sous-colonne null, au lieu de lire et de traiter l’ensemble des données de la colonne. La requête SELECT n IS NOT NULL FROM table se transforme en SELECT NOT n.null FROM TABLE.
Vérification des valeurs booléennes
IS TRUE, IS FALSE, IS UNKNOWN, IS NOT TRUE, IS NOT FALSE et IS NOT UNKNOWN.
Ils s’utilisent avec les expressions Bool et Nullable(Bool).
expr IS TRUErenvoie1uniquement siexprvauttrue.expr IS FALSErenvoie1uniquement siexprvautfalse.expr IS UNKNOWNrenvoie1uniquement siexprvautNULL.expr IS NOT TRUErenvoie1siexprvautfalseouNULL.expr IS NOT FALSErenvoie1siexprvauttrueouNULL.expr IS NOT UNKNOWNrenvoie1siexprn’est pasNULL.
IS UNKNOWN est équivalent à IS NULL et IS NOT UNKNOWN est équivalent à IS NOT NULL.