Saltar al contenido principal

Descripción general

Las funciones aritméticas se aplican a cualquier par de operandos de tipo UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32 o Float64. Antes de realizar la operación, ambos operandos se convierten al tipo de resultado. El tipo de resultado se determina de la siguiente manera (a menos que se especifique lo contrario en la documentación de la función que aparece a continuación):
  • Si ambos operandos tienen hasta 32 bits, el tamaño del tipo de resultado será el del siguiente tipo de mayor tamaño después del mayor de los dos operandos (promoción de tamaño de enteros). Por ejemplo, UInt8 + UInt16 = UInt32 o Float32 * Float32 = Float64.
  • Si uno de los operandos tiene 64 bits o más, el tamaño del tipo de resultado será el mismo que el del mayor de los dos operandos. Por ejemplo, UInt32 + UInt128 = UInt128 o Float32 * Float64 = Float64.
  • Si uno de los operandos es con signo, el tipo de resultado también será con signo; en caso contrario, será sin signo. Por ejemplo, UInt32 * Int32 = Int64 o UInt32 * UInt32 = UInt64.
Estas reglas garantizan que el tipo de resultado será el tipo más pequeño capaz de representar todos los resultados posibles. Aunque esto introduce un riesgo de desbordamiento cerca de los límites del rango de valores, garantiza que los cálculos se realicen rápidamente utilizando el ancho nativo máximo de enteros de 64 bits. Este comportamiento también garantiza la compatibilidad con muchas otras bases de datos que ofrecen enteros de 64 bits (BIGINT) como el mayor tipo entero. Ejemplo:
SELECT toTypeName(0), toTypeName(0 + 0), toTypeName(0 + 0 + 0), toTypeName(0 + 0 + 0 + 0)
┌─toTypeName(0)─┬─toTypeName(plus(0, 0))─┬─toTypeName(plus(plus(0, 0), 0))─┬─toTypeName(plus(plus(plus(0, 0), 0), 0))─┐
│ UInt8         │ UInt16                 │ UInt32                          │ UInt64                                   │
└───────────────┴────────────────────────┴─────────────────────────────────┴──────────────────────────────────────────┘
Los desbordamientos se producen de la misma forma que en C++.

abs

Introducido en: v1.1.0 Calcula el valor absoluto de x. No tiene efecto si x es de tipo sin signo. Si x es de tipo con signo, devuelve un número sin signo. Sintaxis
abs(x)
Argumentos
  • x — Valor del que se obtiene el valor absoluto
Valor devuelto El valor absoluto de x Ejemplos Ejemplo de uso
Query
SELECT abs(-0.5)
Response
0.5

avg2

Introducido en: v25.11.0 Calcula y devuelve el valor medio de los argumentos proporcionados. Admite tipos numéricos y temporales. Sintaxis
avg2(x1, x2])
Argumentos
  • x1, x2] — Acepta dos valores para promediarlos.
Valor devuelto Devuelve el valor medio de los argumentos proporcionados, expresado en el tipo compatible de mayor tamaño. Ejemplos Tipos numéricos
Query
SELECT avg2(toUInt8(3), 1.0) AS result, toTypeName(result) AS type;
-- El tipo devuelto es Float64 ya que el UInt8 debe promoverse a 64 bits para la comparación.
Response
┌─result─┬─type────┐
│      2 │ Float64 │
└────────┴─────────┘
Tipos decimales
Query
SELECT avg2(toDecimal32(1, 2), 2) AS result, toTypeName(result) AS type;
Response
┌─result─┬─type──────────┐
│    1.5 │ Decimal(9, 2) │
└────────┴───────────────┘
Tipos de dato Date
Query
SELECT avg2(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type;
Response
┌─────result─┬─type─┐
│ 2025-01-03 │ Date │
└────────────┴──────┘
Tipos de DateTime
Query
SELECT avg2(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type;
Response
┌──────────────result─┬─type─────┐
│ 2025-01-02 06:00:00 │ DateTime │
└─────────────────────┴──────────┘
Tipos Time64
Query
SELECT avg2(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type;
Response
┌───result─┬─type──────┐
│ 13:00:00 │ Time64(0) │
└──────────┴───────────┘

byteSwap

Introducido en: v23.10.0 Invierte los bytes de un entero, es decir, cambia su endianness. El ejemplo siguiente puede desglosarse de la siguiente manera:
  1. Convierta el entero en base 10 a su formato hexadecimal equivalente en orden big-endian; es decir, 3351772109 -> C7 C7 FB CD (4 bytes)
  2. Invierta los bytes; es decir, C7 C7 FB CD -> CD FB C7 C7
  3. Convierta el resultado de nuevo en un entero asumiendo el orden big-endian; es decir, CD FB C7 C7 -> 3455829959 Un caso de uso de esta función es invertir direcciones IPv4:
┌─toIPv4(byteSwap(toUInt32(toIPv4('205.251.199.199'))))─┐
│ 199.199.251.205                                       │
└───────────────────────────────────────────────────────┘
Sintaxis
byteSwap(x)
Argumentos Valor devuelto Devuelve x con los bytes en orden inverso. (U)Int* Ejemplos Ejemplo de uso
Query
SELECT byteSwap(3351772109)
Response
3455829959
8 bits
Query
SELECT byteSwap(54)
Response
54
16 bits
Query
SELECT byteSwap(4135)
Response
10000
32 bits
Query
SELECT byteSwap(3351772109)
Response
3455829959
64 bits
Query
SELECT byteSwap(123294967295)
Response
18439412204227788800

divide

Introducido en: v1.1.0 Calcula el cociente de dos valores, a y b. El tipo de resultado siempre es Float64. La función intDiv proporciona la división entera.
La división por 0 devuelve inf, -inf o nan.
Sintaxis
divide(x, y)
Argumentos
  • x — Dividendo - y — Divisor
Valor devuelto El cociente de x entre y Ejemplos División de dos números
Query
SELECT divide(25,5) AS quotient, toTypeName(quotient)
Response
5 Float64
División por cero
Query
SELECT divide(25,0)
Response
inf

divideDecimal

Introducido en: v22.12.0 Realiza la división de dos números decimales. El valor resultante será de tipo Decimal256. La escala del resultado puede especificarse explícitamente mediante el argumento result_scale (un Integer constante en el rango [0, 76]). Si no se especifica, la escala del resultado será la escala máxima de los argumentos proporcionados.
Esta función es significativamente más lenta que divide. Si realmente no necesita precisión controlada y/o necesita un cálculo rápido, considere usar divide.
Sintaxis
divideDecimal(x, y[, result_scale])
Argumentos
  • x — Primer valor: Decimal. - y — Segundo valor: Decimal. - result_scale — Escala del resultado. Tipo Int/UInt.
Valor devuelto El resultado de la división con la escala especificada. Decimal256 Ejemplos Ejemplo 1
Query
divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10)
Response
┌─divideDecimal(toDecimal256(-12, 0), toDecimal32(2.1, 1), 10)─┐
│                                                -5.7142857142 │
└──────────────────────────────────────────────────────────────┘
Ejemplo 2
Query
SELECT toDecimal64(-12, 1) / toDecimal32(2.1, 1);
SELECT toDecimal64(-12, 1) as a, toDecimal32(2.1, 1) as b, divideDecimal(a, b, 1), divideDecimal(a, b, 5);
Response
┌─divide(toDecimal64(-12, 1), toDecimal32(2.1, 1))─┐
│                                             -5.7 │
└──────────────────────────────────────────────────┘
┌───a─┬───b─┬─divideDecimal(toDecimal64(-12, 1), toDecimal32(2.1, 1), 1)─┬─divideDecimal(toDecimal64(-12, 1), toDecimal32(2.1, 1), 5)─┐
│ -12 │ 2.1 │                                                       -5.7 │                                                   -5.71428 │
└─────┴─────┴────────────────────────────────────────────────────────────┴────────────────────────────────────────────────────────────┘

divideOrNull

Introducido en: v25.5.0 Igual que divide, pero devuelve NULL cuando se divide entre cero. Sintaxis
divideOrNull(x, y)
Argumentos
  • x — Dividendo - y — Divisor
Valor devuelto El cociente de x entre y, o NULL. Ejemplos División entre cero
Query
SELECT divideOrNull(25, 0)
Response
\N

gcd

Introducido en: v1.1.0 Devuelve el máximo común divisor de dos valores, a y b. Se produce una excepción al dividir por cero o al dividir el número negativo mínimo entre menos uno. Sintaxis
gcd(x, y)
Argumentos
  • x — Primer número entero - y — Segundo número entero
Valor devuelto El máximo común divisor de x y y. Ejemplos Ejemplo de uso
Query
SELECT gcd(12, 18)
Response
6

ifNotFinite

Introducido en: v20.3.0 Comprueba si un valor de punto flotante es finito. Puede obtener un resultado similar utilizando el operador ternario: isFinite(x) ? x : y. Sintaxis
ifNotFinite(x,y)
Argumentos
  • x — Valor que se comprueba para ver si es infinito. Float*
  • y — Valor alternativo. Float*
Valor devuelto
  • x si x es finito.
  • y si x no es finito.
Ejemplos Ejemplo de uso
Query
SELECT 1/0 AS infimum, ifNotFinite(infimum,42)
Response
inf  42

intDiv

Introducido en: v1.1.0 Realiza una división entera de dos valores, x entre y. En otras palabras, calcula el cociente redondeado hacia abajo al entero inferior más próximo. El resultado tiene el mismo tamaño que el dividendo (el primer parámetro). Se lanza una excepción al dividir por cero, cuando el cociente no cabe en el rango del dividendo o al dividir el número negativo mínimo entre menos uno. Sintaxis
intDiv(x, y)
Argumentos
  • x — Operando izquierdo. - y — Operando derecho.
Valor devuelto Resultado de la división entera entre x e y Ejemplos División entera de dos números de punto flotante
Query
SELECT intDiv(toFloat64(1), 0.001) AS res, toTypeName(res)
Response
┌──res─┬─toTypeName(intDiv(toFloat64(1), 0.001))─┐
│ 1000 │ Int64                                   │
└──────┴─────────────────────────────────────────┘
El cociente no está dentro del rango del dividendo
Query
SELECT
intDiv(1, 0.001) AS res,
toTypeName(res)
Response
Received exception from server (version 23.2.1):
Code: 153. DB::Exception: Received from localhost:9000. DB::Exception:
Cannot perform integer division, because it will produce infinite or too
large number: While processing intDiv(1, 0.001) AS res, toTypeName(res).
(ILLEGAL_DIVISION)

intDivOrNull

Introducido en: v25.5.0 Igual que intDiv, pero devuelve NULL al dividir por cero o al dividir el número negativo mínimo entre menos uno. Sintaxis
intDivOrNull(x, y)
Argumentos Valor devuelto Resultado de la división entera de x e y, o NULL. Ejemplos División entera entre cero
Query
SELECT intDivOrNull(1, 0)
Response
\N
División del número negativo mínimo entre -1
Query
SELECT intDivOrNull(-9223372036854775808, -1)
Response
\N

intDivOrZero

Introducido en: v1.1.0 Igual que intDiv, pero devuelve cero al dividir por cero o al dividir el número negativo mínimo entre menos uno. Sintaxis
intDivOrZero(a, b)
Argumentos Valor devuelto Resultado de la división entera de a entre b, o cero. Ejemplos División entera por cero
Query
SELECT intDivOrZero(1, 0)
Response
0
Dividir el número negativo mínimo entre -1
Query
SELECT intDivOrZero(0.05, -1)
Response
0

isFinite

Introducido en: v1.1.0 Devuelve 1 si el argumento Float32 o Float64 no es infinito ni es NaN; de lo contrario, esta función devuelve 0. Sintaxis
isFinite(x)
Argumentos
  • x — Número cuya finitud se comprueba. Float*
Valor devuelto 1 si x no es infinito ni NaN; en caso contrario, 0. Ejemplos Comprobar si un número es finito
Query
SELECT isFinite(inf)
Response
0

isInfinite

Introducido en: v1.1.0 Devuelve 1 si el argumento de tipo Float32 o Float64 es infinito; en caso contrario, esta función devuelve 0. Tenga en cuenta que también se devuelve 0 para un NaN. Sintaxis
isInfinite(x)
Argumentos
  • x — Número que se comprueba para determinar si es infinito. Float*
Valor devuelto 1 si x es infinito; de lo contrario, 0 (también para NaN). Ejemplos Comprobar si un número es infinito
Query
SELECT isInfinite(inf), isInfinite(NaN), isInfinite(10))
Response
1 0 0

isNaN

Introducido en: v1.1.0 Devuelve 1 si el argumento de tipo Float32 o Float64 es NaN; de lo contrario, devuelve 0. Sintaxis
isNaN(x)
Argumentos
  • x — Argumento que se evalúa para determinar si es NaN. Float*
Valor devuelto 1 si es NaN; de lo contrario, 0 Ejemplos Ejemplo de uso
Query
SELECT isNaN(NaN)
Response
1

lcm

Introducido en: v1.1.0 Devuelve el mínimo común múltiplo de dos valores x e y. Se produce una excepción al dividir por cero o al dividir el número negativo mínimo entre menos uno. Sintaxis
lcm(x, y)
Argumentos Valor devuelto Devuelve el mínimo común múltiplo de x e y. (U)Int* Ejemplos Ejemplo de uso
Query
SELECT lcm(6, 8)
Response
24

max2

Introducida en: v21.11.0 Devuelve el valor mayor de dos valores numéricos x e y. Sintaxis
max2(x, y)
Argumentos Valor devuelto Devuelve el mayor de los valores x e y. Float64 Ejemplos Ejemplo de uso
Query
SELECT max2(-1, 2)
Response
2

midpoint

Introducido en: v25.11.0 Calcula y devuelve el valor medio de los argumentos proporcionados. Admite tipos numéricos y temporales. Sintaxis
midpoint(x1[, x2, ...])
Argumentos
  • x1[, x2, ...] — Acepta un solo valor o varios para calcular el promedio.
Valor devuelto Devuelve el valor medio de los argumentos proporcionados, convertido al tipo compatible de mayor tamaño. Ejemplos Tipos numéricos
Query
SELECT midpoint(1, toUInt8(3), 0.5) AS result, toTypeName(result) AS type;
-- El tipo devuelto es Float64 ya que el UInt8 debe promoverse a 64 bits para la comparación.
Response
┌─result─┬─type────┐
│    1.5 │ Float64 │
└────────┴─────────┘
Tipos decimales
Query
SELECT midpoint(toDecimal32(1.5, 2), toDecimal32(1, 1), 2) AS result, toTypeName(result) AS type;
Response
┌─result─┬─type──────────┐
│    1.5 │ Decimal(9, 2) │
└────────┴───────────────┘
Tipos de Date
Query
SELECT midpoint(toDate('2025-01-01'), toDate('2025-01-05')) AS result, toTypeName(result) AS type;
Response
┌─────result─┬─type─┐
│ 2025-01-03 │ Date │
└────────────┴──────┘
Tipos de DateTime
Query
SELECT midpoint(toDateTime('2025-01-01 00:00:00'), toDateTime('2025-01-03 12:00:00')) AS result, toTypeName(result) AS type;
Response
┌──────────────result─┬─type─────┐
│ 2025-01-02 06:00:00 │ DateTime │
└─────────────────────┴──────────┘
Tipos de Time64
Query
SELECT midpoint(toTime64('12:00:00', 0), toTime64('14:00:00', 0)) AS result, toTypeName(result) AS type;
Response
┌───result─┬─type──────┐
│ 13:00:00 │ Time64(0) │
└──────────┴───────────┘

min2

Introducido en: v21.11.0 Devuelve el más pequeño de dos valores numéricos, x e y. Sintaxis
min2(x, y)
Argumentos Valor devuelto Devuelve el menor valor entre x e y. Float64 Ejemplos Ejemplo de uso
Query
SELECT min2(-1, 2)
Response
-1

minus

Introducido en: v1.1.0 Calcula la diferencia entre dos valores, a y b. El resultado siempre tiene signo. Al igual que con plus, es posible restar un entero de una fecha o de una fecha con hora. Además, se admite la resta entre fechas con hora, lo que da como resultado la diferencia de tiempo entre ambas. Sintaxis
minus(x, y)
Argumentos
  • x — Minuendo. - y — Sustraendo.
Valor devuelto x menos y Ejemplos Resta de dos números
Query
SELECT minus(10, 5)
Response
5
Resta entre un entero y una fecha
Query
SELECT minus(toDate('2025-01-01'),5)
Response
2024-12-27

modulo

Introducido en: v1.1.0 Calcula el resto de la división de dos valores, a entre b. El tipo de resultado es un entero si ambas entradas son enteras. Si una de las entradas es un número de coma flotante, el tipo de resultado es Float64. El resto se calcula igual que en C++. Para los números negativos, se usa la división truncada. Se genera una excepción al dividir por cero o al dividir el número negativo mínimo entre menos uno. Sintaxis
modulo(a, b)
Alias: mod Argumentos
  • a — El dividendo - b — El divisor (módulo)
Valor devuelto El resto de a % b Ejemplos Ejemplo de uso
Query
SELECT modulo(5, 2)
Response
1

moduloLegacy

Introducido en: v1.1.0 Calcula el resto de una división. Esta es la implementación heredada de módulo que usa el operador % de C++, que puede producir resultados negativos con argumentos negativos. Esta función existe por compatibilidad retroactiva con la lógica antigua de particionado de tablas. Utilice modulo o positiveModulo para el comportamiento estándar. Sintaxis
moduloLegacy(a, b)
Argumentos Valor devuelto Devuelve el resto de la división. (U)Int* o Float* Ejemplos Uso básico
Query
SELECT moduloLegacy(10, 3)
Response
1

moduloOrNull

Introducido en: v25.5.0 Calcula el resto de dividir a entre b. Es similar a la función modulo, excepto que moduloOrNull devuelve NULL si el argumento de la derecha es 0. Sintaxis
moduloOrNull(x, y)
Alias: modOrNull Argumentos Valor devuelto Devuelve el resto de la división de x entre y, o NULL cuando el divisor es cero. Ejemplos moduloOrNull con cero
Query
SELECT moduloOrNull(5, 0)
Response
\N

moduloOrZero

Introducido en: v20.3.0 Como modulo, pero devuelve cero cuando el divisor es cero, en lugar de generar una excepción con la función modulo. Sintaxis
moduloOrZero(a, b)
Argumentos Valor devuelto Devuelve el resto de a % b, o 0 si el divisor es 0. Ejemplos Ejemplo de uso
Query
SELECT moduloOrZero(5, 0)
Response
0

multiply

Introducido en: v1.1.0 Calcula el producto de dos valores x y y. Sintaxis
multiply(x, y)
Argumentos Valor devuelto Devuelve el producto de x e y Ejemplos Multiplicación de dos números
Query
SELECT multiply(5,5)
Response
25

multiplyDecimal

Introducido en: v22.12.0 Realiza la multiplicación de dos valores decimales. El valor resultante será de tipo Decimal256. La escala del resultado puede especificarse explícitamente mediante el argumento result_scale (Integer constante en el rango [0, 76]). Si no se especifica, la escala del resultado será la escala máxima de los argumentos proporcionados.
Estas funciones son considerablemente más lentas que multiply. Si realmente no necesita precisión controlada o necesita un cálculo rápido, considere usar multiply
Sintaxis
multiplyDecimal(a, b[, result_scale])
Argumentos
  • a — Primer valor. Decimal
  • b — Segundo valor. Decimal
  • result_scale — Escala del resultado. (U)Int*
Valor devuelto El resultado de la multiplicación con la escala indicada. Tipo: Decimal256 Ejemplos Ejemplo de uso
Query
SELECT multiplyDecimal(toDecimal256(-12, 0), toDecimal32(-2.1, 1), 1)
Response
25.2
Diferencia con la multiplicación normal
Query
SELECT multiplyDecimal(toDecimal256(-12, 0), toDecimal32(-2.1, 1), 1)
Response
┌─multiply(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐
│                                               -26.8609633 │
└───────────────────────────────────────────────────────────┘
┌─multiplyDecimal(toDecimal64(-12.647, 3), toDecimal32(2.1239, 4))─┐
│                                                         -26.8609 │
└──────────────────────────────────────────────────────────────────┘
Desbordamiento del tipo Decimal
Query
SELECT
    toDecimal64(-12.647987876, 9) AS a,
    toDecimal64(123.967645643, 9) AS b,
    multiplyDecimal(a, b);
SELECT
    toDecimal64(-12.647987876, 9) AS a,
    toDecimal64(123.967645643, 9) AS b,
    a * b;
Response
┌─────────────a─┬─────────────b─┬─multiplyDecimal(toDecimal64(-12.647987876, 9), toDecimal64(123.967645643, 9))─┐
│ -12.647987876 │ 123.967645643 │                                                               -1567.941279108 │
└───────────────┴───────────────┴───────────────────────────────────────────────────────────────────────────────┘
Received exception from server (version 22.11.1):
Code: 407. DB::Exception: Received from localhost:9000. DB::Exception: Decimal math overflow:
While processing toDecimal64(-12.647987876, 9) AS a, toDecimal64(123.967645643, 9) AS b, a * b. (DECIMAL_OVERFLOW)

negate

Introducido en: v1.1.0 Devuelve el valor negado del argumento x. El resultado siempre es con signo. Sintaxis
negate(x)
Argumentos
  • x — El valor que se va a negar.
Valor devuelto Devuelve -x de x Ejemplos Ejemplo de uso
Query
SELECT negate(10)
Response
-10

plus

Introducido en: v1.1.0 Calcula la suma de dos valores x e y. Alias: x + y (operador). Es posible sumar un entero y una fecha o una fecha con hora. La primera operación aumenta el número de días de la fecha; la segunda aumenta el número de segundos de la fecha con hora. También es posible sumar una fecha y una hora. Sumar un Date y un Time produce un DateTime. Sumar un Date y un Time64, o un Date32 y un Time o Time64, produce un DateTime64. Sintaxis
plus(x, y)
Argumentos
  • x — operando izquierdo. - y — operando derecho.
Valor devuelto Devuelve la suma de x e y Ejemplos Suma de dos números
Query
SELECT plus(5,5)
Response
10
Sumar un entero a una fecha
Query
SELECT plus(toDate('2025-01-01'),5)
Response
2025-01-06
Agregar fecha y hora
Query
SELECT toDate('2025-01-01') + CAST('14:30:25', 'Time')
Response
2025-01-01 14:30:25

positiveModulo

Introducido en: v22.11.0 Calcula el resto de dividir x entre y. Es similar a la función modulo, salvo que positiveModulo siempre devuelve un número no negativo. Sintaxis
positiveModulo(x, y)
Alias: positive_modulo, pmod Argumentos Valor devuelto Devuelve la diferencia entre x y el entero más cercano, no mayor que x, que sea divisible por y. Ejemplos Ejemplo de uso
Query
SELECT positiveModulo(-1, 10)
Response
9

positiveModuloOrNull

Introducido en: v25.5.0 Calcula el resto de dividir a entre b. Es similar a la función positiveModulo, salvo que positiveModuloOrNull devuelve NULL si el argumento de la derecha es 0. Sintaxis
positiveModuloOrNull(x, y)
Alias: positive_modulo_or_null, pmodOrNull Argumentos Valor devuelto Devuelve la diferencia entre x y el entero más cercano, no mayor que x, divisible por y; null cuando el divisor es cero. Ejemplos positiveModuloOrNull
Query
SELECT positiveModuloOrNull(5, 0)
Response
\N
Última modificación el 10 de junio de 2026