Operadores de acceso
a[N] – Acceso a un elemento de un array. La función arrayElement(a, N).
a.N – Acceso a un elemento de una tupla. La función tupleElement(a, N).
Operador de negación numérica
-a – la función negate (a).
Para la negación de tupla: tupleNegate.
Operadores de multiplicación y división
a * b – La función multiply (a, b).
Para multiplicar una tupla por un número: tupleMultiplyByNumber; para el producto escalar: dotProduct.
a / b – La función divide(a, b).
Para dividir una tupla por un número: tupleDivideByNumber.
a % b – La función modulo(a, b).
Operadores de suma y resta
a + b – La función plus(a, b).
Para la suma de tuplas: tuplePlus.
a - b – La función minus(a, b).
Para la resta de tuplas: tupleMinus.
Operadores de comparación
función equals
a = b – La función equals(a, b).
a == b – La función equals(a, b).
función notEquals
a != b: la función notEquals(a, b).
a <> b: la función notEquals(a, b).
función lessOrEquals
a <= b: la función lessOrEquals(a, b).
función greaterOrEquals
a >= b – La función greaterOrEquals(a, b).
función less
a < b – La función less(a, b).
función greater
a > b – La función greater(a, b).
función like
a LIKE b – La función like(a, b).
función notLike
a NOT LIKE b – La función notLike(a, b).
función ilike
a ILIKE b – La función ilike(a, b).
Función BETWEEN
a BETWEEN b AND c – Equivale a a >= b AND a <= c.
a NOT BETWEEN b AND c – Equivale a a < b OR a > c.
operador is not distinct from (<=>)
A partir de la versión 25.10, puedes usar
<=> igual que cualquier otro operador.
Antes de la versión 25.10, solo se podía usar en expresiones JOIN, por ejemplo:<=> es el operador de igualdad seguro para NULL, equivalente a IS NOT DISTINCT FROM.
Funciona como el operador de igualdad normal (=), pero trata los valores NULL como comparables.
Dos valores NULL se consideran iguales, y un NULL comparado con cualquier valor distinto de NULL devuelve 0 (falso) en lugar de NULL.
Operadores para trabajar con cadenas
OVERLAY
OVERLAY(string PLACING replacement FROM offset)- La funciónoverlay(string, replacement, offset).OVERLAY(string PLACING replacement FROM offset FOR length)- La funciónoverlay(string, replacement, offset, length).OVERLAYUTF8(string PLACING replacement FROM offset)- La funciónoverlayUTF8(string, replacement, offset).OVERLAYUTF8(string PLACING replacement FROM offset FOR length)- La funciónoverlayUTF8(string, replacement, offset, length).
Operadores para trabajar con conjuntos de datos
función in
a IN ... – La función in(a, b).
función notIn
a NOT IN ... – La función notIn(a, b).
función globalIn
a GLOBAL IN ... – La función globalIn(a, b).
función globalNotIn
a GLOBAL NOT IN ... – La función globalNotIn(a, b).
función in subconsulta
a = ANY (subquery) – La función in(a, subquery).
notIn subconsulta function
a != ANY (subquery) – Igual que a NOT IN (SELECT singleValueOrNull(*) FROM subquery).
función in subconsulta
a = ALL (subquery) – Lo mismo que a IN (SELECT singleValueOrNull(*) FROM subquery).
función notIn en subconsulta
a != ALL (subquery) – La función notIn(a, subquery).
Ejemplos
Consulta con ALL:
Query
Response
Query
Response
SOME / ALL en arrays
SOME / ALL puede ser una expresión de array (un literal de array, una columna de tipo array o cualquier expresión que devuelva un array). Esta es la sintaxis de cuantificador de array al estilo de PostgreSQL. Se reconoce durante el análisis y se reescribe como funciones de array, por lo que no hace falta ninguna reescritura manual:
| Sintaxis | Reescrito como |
|---|---|
expr = SOME(arr) | has(arr, expr) |
expr <> ALL(arr) | NOT has(arr, expr) |
expr OP SOME(arr) (cualquier otro operador de comparación) | arrayExists(x -> expr OP x, arr) |
expr OP ALL(arr) (cualquier otro operador de comparación) | arrayAll(x -> expr OP x, arr) |
SOME es el cuantificador existencial (el sinónimo de SQL de ANY). = y <> se tratan de forma especial como has / NOT has porque tienen una implementación optimizada; en la forma general se usan las funciones de orden superior arrayExists / arrayAll.
La forma de array se reconoce solo para los operadores de comparación =, ==, !=, <>, <=>, <, <=, >, y >=. Otros operadores que aceptan un array a la derecha —por ejemplo, LIKE, ILIKE, NOT LIKE, REGEXP e IN— no se reescriben como cuantificadores de array y conservan su significado habitual. Por ejemplo, 'abc' LIKE SOME(['a%', 'b%']) no es la sintaxis del cuantificador de array; use arrayExists / arrayAll directamente en esos casos.
ANY no es compatible con la forma de arraySolo SOME y ALL aceptan un array en el lado derecho. ANY se excluye porque any también es una función de agregación, por lo que una expresión con la forma expr = any(x) conserva el significado de una llamada de función. Use SOME para el cuantificador de array.Query
Response
El manejo de
NULL difiere de la forma con subconsultaComo la forma de array se reescribe en el analizador sintáctico (donde la configuración de la consulta, como transform_null_in, no está disponible, y una columna array por fila no puede usar la ruta IN null-safe del analyzer), utiliza la semántica de dos valores de has (para = / <>) y arrayExists / arrayAll (que reducen a 0 un resultado desconocido en una comparación con NULL). Esto puede diferir de la forma con subconsulta, cuyo manejo de NULL se implementa mediante IN / NOT IN y depende de transform_null_in:Operadores para trabajar con fechas y horas
EXTRACT
part especifica qué componente de la fecha se debe obtener. Se admiten los siguientes valores:
NANOSECOND— El nanosegundo. Posibles valores: 0–999999999.MICROSECOND— El microsegundo. Posibles valores: 0–999999.MILLISECOND— El milisegundo. Posibles valores: 0–999.SECOND— El segundo. Posibles valores: 0–59.MINUTE— El minuto. Posibles valores: 0–59.HOUR— La hora. Posibles valores: 0–23.DAY— El día del mes. Posibles valores: 1–31.WEEK— El número de semana ISO 8601. Posibles valores: 1–53.MONTH— El número del mes. Posibles valores: 1–12.QUARTER— El trimestre. Posibles valores: 1–4.YEAR— El año.EPOCH— La marca de tiempo Unix (segundos desde 1970-01-01 00:00:00 UTC). Nota: paraDateTime64, la parte de subsegundos se trunca.DOW— El día de la semana (compatible con PostgreSQL). 0 = domingo, 6 = sábado.DOY— El día del año. Posibles valores: 1–366.ISODOW— El día de la semana según ISO. 1 = lunes, 7 = domingo.ISOYEAR— El año de numeración de semanas ISO 8601.CENTURY— El siglo. Por ejemplo, el año 2024 está en el siglo XXI.DECADE— La década (año dividido entre 10). Por ejemplo, el año 2024 corresponde a la década 202.MILLENNIUM— El milenio. Por ejemplo, el año 2024 está en el 3.er milenio.TIMEZONE_HOUR— La parte horaria con signo del desplazamiento UTC de la zona horaria del operando. Por ejemplo,+5:30devuelve5,-3:30devuelve-3.TIMEZONE_MINUTE— La parte en minutos con signo del desplazamiento UTC de la zona horaria del operando. Por ejemplo,+5:30devuelve30,-3:30devuelve-30.
part no distingue entre mayúsculas y minúsculas.
El parámetro date especifica el valor que se debe procesar. Se admiten los tipos Date, Date32, DateTime, DateTime64 e Interval. Cuando date es un Interval, el part solicitado debe coincidir con el tipo almacenado del intervalo (por ejemplo, se permite EXTRACT(DAY FROM INTERVAL 5 DAY); EXTRACT(HOUR FROM INTERVAL 5 DAY) se rechaza, porque los intervalos de ClickHouse son de un solo tipo). El resultado para un operando Interval es Int64.
Ejemplos:
DateTime.
INTERVAL
SECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
INTERVAL. Por ejemplo, INTERVAL 1 HOUR es idéntico a INTERVAL '1 hour' o INTERVAL '1' hour.
Ejemplos:
Siempre se prefieren la sintaxis
INTERVAL o la función addDays. La suma o resta simple (con sintaxis como now() + ...) no tiene en cuenta la configuración horaria. Por ejemplo, el horario de verano.- tipo de dato Interval
- funciones de conversión de tipos toInterval
Suma de fecha y hora
+. El resultado es un DateTime o DateTime64 que representa la fecha a la hora del día especificada. La operación es conmutativa.
El tipo de resultado depende de los tipos de los operandos:
| Operando izquierdo | Operando derecho | Tipo de resultado |
|---|---|---|
Date | Time | DateTime |
Date | Time64(s) | DateTime64(s) |
Date32 | Time | DateTime64(0) |
Date32 | Time64(s) | DateTime64(s) |
El resultado utiliza la zona horaria de la sesión (o la zona horaria predeterminada del servidor si no se ha configurado ninguna para la sesión). La configuración
date_time_overflow_behavior controla qué sucede cuando el resultado queda fuera del rango representable.Operador lógico AND
SELECT a AND b — calcula la conjunción lógica entre a y b con la función and.
Operador lógico OR
SELECT a OR b — calcula la disyunción lógica entre a y b mediante la función or.
Operador de negación lógica
SELECT NOT a — calcula la negación lógica de a mediante la función not.
Operador condicional
a ? b : c – La función if(a, b, c).
Nota:
El operador condicional calcula los valores de b y c, luego comprueba si se cumple la condición a y después devuelve el valor correspondiente. Si b o C es una función arrayJoin(), cada fila se replicará independientemente de la condición «a».
Expresión condicional
x, se usa la función transform(x, [a, ...], [b, ...], c). De lo contrario, se usa multiIf(a, b, ..., c).
Si no hay una cláusula ELSE c en la expresión, el valor predeterminado es NULL.
La función transform no funciona con NULL.
Operador de concatenación
s1 || s2 – La función concat(s1, s2).
Operador de creación de lambda
x -> expr – La función lambda(x, expr).
Los siguientes operadores no tienen prioridad, ya que son corchetes:
Operador de creación de Array
[x1, ...] – La función array(x1, ...).
Operador de creación de tupla
(x1, x2, ...) – La función tuple(x2, x2, ...).
Asociatividad
1 + 2 + 3 se transforma en plus(plus(1, 2), 3).
A veces esto no funciona como cabría esperar. Por ejemplo, SELECT 4 > 2 > 3 dará como resultado 0.
Por motivos de eficiencia, las funciones and y or aceptan cualquier número de argumentos. Las cadenas correspondientes de operadores AND y OR se transforman en una única llamada a estas funciones.
Comprobación de NULL
IS NULL y IS NOT NULL.
IS NULL
- Para los valores de tipo Nullable, el operador
IS NULLdevuelve:1si el valor esNULL.0en caso contrario.
- Para cualquier otro valor, el operador
IS NULLsiempre devuelve0.
optimize_functions_to_subcolumns = 1, la función lee solo la subcolumna null en lugar de leer y procesar todos los datos de la columna. La consulta SELECT n IS NULL FROM table se transforma en SELECT n.null FROM TABLE.
IS NOT NULL
- Para los valores de tipo Nullable, el operador
IS NOT NULLdevuelve:0si el valor esNULL.1en caso contrario.
- Para otros valores, el operador
IS NOT NULLsiempre devuelve1.
optimize_functions_to_subcolumns = 1, la función lee solo la subcolumna null en lugar de leer y procesar los datos de toda la columna. La consulta SELECT n IS NOT NULL FROM table se convierte en SELECT NOT n.null FROM TABLE.
Verificación de valores booleanos
IS TRUE, IS FALSE, IS UNKNOWN, IS NOT TRUE, IS NOT FALSE e IS NOT UNKNOWN.
Se utilizan con expresiones Bool y Nullable(Bool).
expr IS TRUEdevuelve1solo siexprestrue.expr IS FALSEdevuelve1solo siexpresfalse.expr IS UNKNOWNdevuelve1solo siexpresNULL.expr IS NOT TRUEdevuelve1siexpresfalseoNULL.expr IS NOT FALSEdevuelve1siexprestrueoNULL.expr IS NOT UNKNOWNdevuelve1siexprno esNULL.
IS UNKNOWN equivale a IS NULL, e IS NOT UNKNOWN equivale a IS NOT NULL.