Saltar al contenido principal
ClickHouse transforma los operadores en sus funciones correspondientes durante la fase de análisis sintáctico de la consulta, según su prioridad, precedencia y asociatividad.

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:
CREATE TABLE a (x String) ENGINE = Memory;
INSERT INTO a VALUES ('ClickHouse');

SELECT * FROM a AS a1 JOIN a AS a2 ON a1.x <=> a2.x;

┌─x──────────┬─a2.x───────┐
│ ClickHouse │ ClickHouse │
└────────────┴────────────┘
El operador <=> 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.
SELECT
  'ClickHouse' <=> NULL,
  NULL <=> NULL
┌─isNotDistinc⋯use', NULL)─┬─isNotDistinc⋯NULL, NULL)─┐
│                        0 │                        1 │
└──────────────────────────┴──────────────────────────┘

Operadores para trabajar con cadenas

OVERLAY

  • OVERLAY(string PLACING replacement FROM offset) - La función overlay(string, replacement, offset).
  • OVERLAY(string PLACING replacement FROM offset FOR length) - La función overlay(string, replacement, offset, length).
  • OVERLAYUTF8(string PLACING replacement FROM offset) - La función overlayUTF8(string, replacement, offset).
  • OVERLAYUTF8(string PLACING replacement FROM offset FOR length) - La función overlayUTF8(string, replacement, offset, length).

Operadores para trabajar con conjuntos de datos

Consulte los operadores IN y el operador EXISTS.

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
SELECT number AS a FROM numbers(10) WHERE a > ALL (SELECT number FROM numbers(3, 3));
Response
┌─a─┐
│ 6 │
│ 7 │
│ 8 │
│ 9 │
└───┘
Consulta con ANY:
Query
SELECT number AS a FROM numbers(10) WHERE a > ANY (SELECT number FROM numbers(3, 3));
Response
┌─a─┐
│ 4 │
│ 5 │
│ 6 │
│ 7 │
│ 8 │
│ 9 │
└───┘

Operadores para trabajar con fechas y horas

EXTRACT

EXTRACT(part FROM date);
Extrae componentes de una fecha determinada. Por ejemplo, puedes obtener el mes de una fecha determinada o el segundo de una hora. El parámetro part especifica qué componente de la fecha se debe obtener. Se admiten los siguientes valores:
  • 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: para DateTime64, 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.
El parámetro part no distingue entre mayúsculas y minúsculas. El parámetro date especifica la fecha o la hora que se debe procesar. Se admiten los tipos Date, Date32, DateTime y DateTime64. Ejemplos:
SELECT EXTRACT(DAY FROM toDate('2017-06-15'));
SELECT EXTRACT(MONTH FROM toDate('2017-06-15'));
SELECT EXTRACT(YEAR FROM toDate('2017-06-15'));
SELECT EXTRACT(EPOCH FROM toDateTime('2024-01-15 12:30:45', 'UTC'));
SELECT EXTRACT(DOW FROM toDate('2024-01-15'));
SELECT EXTRACT(CENTURY FROM toDate('2024-01-01'));
En el siguiente ejemplo creamos una tabla e insertamos en ella un valor de tipo DateTime.
CREATE TABLE test.Orders
(
    OrderId UInt64,
    OrderName String,
    OrderDate DateTime
) ENGINE = MergeTree
ORDER BY ();
INSERT INTO test.Orders VALUES (1, 'Jarlsberg Cheese', toDateTime('2008-10-11 13:23:44'));
SELECT
    toYear(OrderDate) AS OrderYear,
    toMonth(OrderDate) AS OrderMonth,
    toDayOfMonth(OrderDate) AS OrderDay,
    toHour(OrderDate) AS OrderHour,
    toMinute(OrderDate) AS OrderMinute,
    toSecond(OrderDate) AS OrderSecond
FROM test.Orders;
┌─OrderYear─┬─OrderMonth─┬─OrderDay─┬─OrderHour─┬─OrderMinute─┬─OrderSecond─┐
│      2008 │         10 │       11 │        13 │          23 │          44 │
└───────────┴────────────┴──────────┴───────────┴─────────────┴─────────────┘
Puedes ver más ejemplos en tests.

INTERVAL

Crea un valor de tipo Interval que debe usarse en operaciones aritméticas con valores de tipo Date y DateTime. Tipos de intervalos:
  • SECOND
  • MINUTE
  • HOUR
  • DAY
  • WEEK
  • MONTH
  • QUARTER
  • YEAR
También puedes usar una cadena literal al definir el valor de INTERVAL. Por ejemplo, INTERVAL 1 HOUR es idéntico a INTERVAL '1 hour' o INTERVAL '1' hour.
Los intervalos de distintos tipos no pueden combinarse. No puedes usar expresiones como INTERVAL 4 DAY 1 HOUR. Especifica los intervalos en unidades menores o iguales que la unidad mínima del intervalo; por ejemplo, INTERVAL 25 HOUR. Puedes usar operaciones consecutivas, como en el ejemplo siguiente.
Ejemplos:
SELECT now() AS current_date_time, current_date_time + INTERVAL 4 DAY + INTERVAL 3 HOUR;
┌───current_date_time─┬─plus(plus(now(), toIntervalDay(4)), toIntervalHour(3))─┐
│ 2020-11-03 22:09:50 │                                    2020-11-08 01:09:50 │
└─────────────────────┴────────────────────────────────────────────────────────┘
SELECT now() AS current_date_time, current_date_time + INTERVAL '4 day' + INTERVAL '3 hour';
┌───current_date_time─┬─plus(plus(now(), toIntervalDay(4)), toIntervalHour(3))─┐
│ 2020-11-03 22:12:10 │                                    2020-11-08 01:12:10 │
└─────────────────────┴────────────────────────────────────────────────────────┘
SELECT now() AS current_date_time, current_date_time + INTERVAL '4' day + INTERVAL '3' hour;
┌───current_date_time─┬─plus(plus(now(), toIntervalDay('4')), toIntervalHour('3'))─┐
│ 2020-11-03 22:33:19 │                                        2020-11-08 01:33:19 │
└─────────────────────┴────────────────────────────────────────────────────────────┘
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.
Ejemplos:
SELECT toDateTime('2014-10-26 00:00:00', 'Asia/Istanbul') AS time, time + 60 * 60 * 24 AS time_plus_24_hours, time + toIntervalDay(1) AS time_plus_1_day;
┌────────────────time─┬──time_plus_24_hours─┬─────time_plus_1_day─┐
│ 2014-10-26 00:00:00 │ 2014-10-26 23:00:00 │ 2014-10-27 00:00:00 │
└─────────────────────┴─────────────────────┴─────────────────────┘
Véase también

Suma de fecha y hora

Se puede sumar un valor Date o Date32 a un valor Time o Time64 mediante el operador +. 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 izquierdoOperando derechoTipo de resultado
DateTimeDateTime
DateTime64(s)DateTime64(s)
Date32TimeDateTime64(0)
Date32Time64(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.
Ejemplos:
SET use_legacy_to_time = 0;
SELECT toDate('2024-07-15') + toTime('14:30:25') AS dt, toTypeName(dt);
┌──────────────────dt─┬─toTypeName(dt)─┐
│ 2024-07-15 14:30:25 │ DateTime       │
└─────────────────────┴────────────────┘
SELECT toDate('2024-07-15') + toTime64('14:30:25.123456', 6) AS dt, toTypeName(dt);
┌─────────────────────────dt─┬─toTypeName(dt)─┐
│ 2024-07-15 14:30:25.123456 │ DateTime64(6)  │
└────────────────────────────┴────────────────┘
SELECT toTime64('23:59:59.999', 3) + toDate32('2024-07-15') AS dt, toTypeName(dt);
┌──────────────────────dt─┬─toTypeName(dt)─┐
│ 2024-07-15 23:59:59.999 │ DateTime64(3)  │
└─────────────────────────┴────────────────┘

Operador lógico AND

Sintaxis SELECT a AND b — calcula la conjunción lógica entre a y b con la función and.

Operador lógico OR

Sintaxis 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

Sintaxis 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

CASE [x]
    WHEN a THEN b
    [WHEN ... THEN ...]
    [ELSE c]
END
Si se especifica 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

Todos los operadores binarios tienen asociatividad por la izquierda. Por ejemplo, 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

ClickHouse admite los operadores IS NULL y IS NOT NULL.

IS NULL

  • Para los valores de tipo Nullable, el operador IS NULL devuelve:
    • 1 si el valor es NULL.
    • 0 en caso contrario.
  • Para cualquier otro valor, el operador IS NULL siempre devuelve 0.
Puede optimizarse habilitando la configuración optimize_functions_to_subcolumns. Con 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.
SELECT x+100 FROM t_null WHERE y IS NULL
┌─plus(x, 100)─┐
│          101 │
└──────────────┘

IS NOT NULL

  • Para los valores de tipo Nullable, el operador IS NOT NULL devuelve:
    • 0 si el valor es NULL.
    • 1 en caso contrario.
  • Para otros valores, el operador IS NOT NULL siempre devuelve 1.
SELECT * FROM t_null WHERE y IS NOT NULL
┌─x─┬─y─┐
│ 2 │ 3 │
└───┴───┘
Se puede optimizar habilitando el ajuste optimize_functions_to_subcolumns. Con 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.
Última modificación el 10 de junio de 2026