Арифметические функции
Обзор
Арифметические функции работают для любых двух операндов типов UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32 или Float64.
Перед выполнением операции оба операнда приводятся к типу результата. Тип результата определяется следующим образом (если иное не указано в документации функции ниже):
- Если оба операнда имеют разрядность до 32 бит включительно, размер типа результата будет соответствовать размеру следующего большего типа
по сравнению с большим из двух операндов (повышение разрядности целочисленного типа). Например,
UInt8 + UInt16 = UInt32илиFloat32 * Float32 = Float64. - Если один из операндов имеет 64 бита или больше, размер типа результата будет таким же, как у большего из двух операндов. Например,
UInt32 + UInt128 = UInt128илиFloat32 * Float64 = Float64. - Если один из операндов знаковый, тип результата также будет знаковым, в противном случае он будет беззнаковым. Например,
UInt32 * Int32 = Int64илиUInt32 * UInt32 = UInt64.
Эти правила гарантируют, что тип результата будет наименьшим типом, который может представить все возможные результаты. Хотя это создаёт риск переполнений вблизи границы диапазона значений, оно обеспечивает быстрое выполнение вычислений с использованием максимальной нативной целочисленной разрядности 64 бита. Такое поведение также гарантирует совместимость со многими другими СУБД, которые предоставляют 64-битные целые числа (BIGINT) как наибольший целочисленный тип.
Пример:
Переполнения происходят так же, как и в C++.
abs
Добавлена в версии: v1.1
Вычисляет абсолютное значение x. Не изменяет значение, если x имеет беззнаковый тип. Если x имеет знаковый тип, возвращает число беззнакового типа.
Синтаксис
Аргументы
x— Значение, для которого вычисляется абсолютное значение
Возвращаемое значение
Абсолютное значение x
Примеры
Пример использования
avg2
Введена в версии: v25.11
Вычисляет и возвращает среднее значение переданных аргументов. Поддерживает числовые и временные типы.
Синтаксис
Аргументы
x1, x2]— Принимает два значения, по которым вычисляется среднее.
Возвращаемое значение
Возвращает среднее значение переданных аргументов, приведённое к наибольшему совместимому типу.
Примеры
Числовые типы
Десятичные типы данных
Типы данных Date
Типы данных DateTime
Типы данных Time64
byteSwap
Введена в версии: v23.10
Переставляет байты целого числа в обратном порядке, т. е. изменяет его порядок байт (endianness).
Пример ниже можно разобрать следующим образом:
- Преобразовать десятичное целое число в эквивалентное шестнадцатеричное представление в формате big-endian, т. е. 3351772109 -> C7 C7 FB CD (4 байта)
- Развернуть порядок байтов, т. е. C7 C7 FB CD -> CD FB C7 C7
- Преобразовать результат обратно в целое число, предполагая формат big-endian, т. е. CD FB C7 C7 -> 3455829959 Один из вариантов использования этой функции — разворот IPv4-адресов:
Синтаксис
Аргументы
x— целочисленное значение.(U)Int*
Возвращаемое значение
Возвращает x с байтами в обратном порядке. (U)Int*
Примеры
Пример использования
8-битный
16-бит
32-битный
64-разрядный
divide
Появилась в версии: v1.1
Вычисляет частное двух значений a и b. Тип результата всегда Float64.
Целочисленное деление выполняется функцией intDiv.
Деление на 0 возвращает inf, -inf или nan.
Синтаксис
Аргументы
x— делимое,y— делитель
Возвращаемое значение
Частное от деления x на y
Примеры
Деление двух чисел
Деление на ноль
divideDecimal
Введена в: v22.12
Выполняет деление двух десятичных чисел. Результирующее значение будет типа Decimal256.
Масштаб результата может быть явно задан аргументом result_scale (константа Integer в диапазоне [0, 76]). Если не задан, масштаб результата равен максимальному масштабу среди переданных аргументов.
Эта функция работает заметно медленнее, чем обычная divide.
Если вам не требуется строго контролируемая точность и/или нужны быстрые вычисления, рассмотрите использование divide.
Синтаксис
Аргументы
x— первое значение: Decimal. -y— второе значение: Decimal. -result_scale— масштаб результата. Тип Int/UInt.
Возвращаемое значение
Результат деления с заданным масштабом. Decimal256
Примеры
Пример 1
Пример 2
divideOrNull
Добавлено в версии: v25.5
То же, что и divide, но возвращает NULL при делении на ноль.
Синтаксис
Аргументы
x— делимое,y— делитель
Возвращаемое значение
Частное от x и y или NULL.
Примеры
Деление на ноль
gcd
Введена в версии: v1.1
Возвращает наибольший общий делитель двух значений a и b.
Исключение выбрасывается при делении на ноль или при делении минимального отрицательного числа на минус один.
Синтаксис
Аргументы
x— первое целое числоy— второе целое число
Возвращаемое значение
Наибольший общий делитель x и y.
Примеры
Пример использования
ifNotFinite
Введена в версии v20.3
Проверяет, является ли число с плавающей запятой конечным.
Аналогичного результата можно добиться с помощью тернарного оператора: isFinite(x) ? x : y.
Синтаксис
Аргументы
Возвращаемое значение
x, еслиx— конечное число.y, еслиxне является конечным числом.
Примеры
Пример использования
intDiv
Добавлено в: v1.1
Выполняет целочисленное деление значения x на y. Другими словами,
вычисляет частное, округлённое вниз до ближайшего меньшего целого.
Результат имеет ту же разрядность, что и делимое (первый параметр).
Исключение выбрасывается при делении на ноль, когда частное не помещается в диапазон значений, допустимый для делимого, или при делении минимального отрицательного числа на минус один.
Синтаксис
Аргументы
x— левый операнд. -y— правый операнд.
Возвращаемое значение
Результат целочисленного деления x на y.
Примеры
Целочисленное деление двух чисел с плавающей запятой
Частное выходит за пределы диапазона делимого
intDivOrNull
Введена в версии: v25.5
То же, что и intDiv, но возвращает NULL при делении на ноль или при делении
минимально возможного отрицательного числа на минус один.
Синтаксис
Аргументы
Возвращаемое значение
Результат целочисленного деления x на y или NULL.
Примеры
Целочисленное деление на ноль
Деление минимального отрицательного числа на −1
intDivOrZero
Введена в: v1.1
Аналог функции intDiv, но возвращает ноль при делении на ноль или при делении
минимального отрицательного числа на минус один.
Синтаксис
Аргументы
Возвращаемое значение
Результат целочисленного деления a на b или ноль.
Примеры
Целочисленное деление на ноль
Деление наименьшего отрицательного числа на минус 1
isFinite
Добавлена в версии: v1.1
Возвращает 1, если аргумент типа Float32 или Float64 не является бесконечностью и не является NaN,
в противном случае функция возвращает 0.
Синтаксис
Аргументы
x— Число, которое нужно проверить на конечность.Float*
Возвращаемое значение
1, если x конечно и не равно NaN, в противном случае 0.
Примеры
Проверка, является ли число конечным
isInfinite
Введена в версии: v1.1
Возвращает 1, если аргумент типа Float32 или Float64 является бесконечным числом; в противном случае функция возвращает 0.
Обратите внимание, что для значения NaN возвращается 0.
Синтаксис
Аргументы
x— Число для проверки на бесконечность.Float*
Возвращаемое значение
1, если x является бесконечным числом, иначе 0 (включая случай NaN).
Примеры
Проверка, является ли число бесконечным
isNaN
Введено в: v1.1
Возвращает 1, если аргумент типа Float32 или Float64 является NaN, в противном случае возвращает 0.
Синтаксис
Аргументы
x— Аргумент, проверяемый на значениеNaN.Float*
Возвращаемое значение
1, если NaN, иначе 0
Примеры
Пример использования
lcm
Добавлено в: v1.1
Возвращает наименьшее общее кратное для двух значений x и y.
Исключение выбрасывается при делении на ноль или при делении минимального отрицательного числа на минус один.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает наименьшее общее кратное x и y. (U)Int*
Примеры
Пример использования
max2
Функция впервые появилась в версии v21.11
Возвращает большее из двух числовых значений x и y.
Синтаксис
Аргументы
x— первое значение(U)Int8/16/32/64илиFloat*илиDecimaly— второе значение(U)Int8/16/32/64илиFloat*илиDecimal
Возвращаемое значение
Возвращает большее значение из x и y. Float64
Примеры
Пример использования
midpoint
Введена в версии v25.11
Вычисляет и возвращает среднее значение указанных аргументов. Поддерживает числовые и временные типы.
Синтаксис
Аргументы
x1[, x2, ...]— Принимает одно или несколько значений для вычисления среднего.
Возвращаемое значение
Возвращает среднее значение переданных аргументов, приведённое к наибольшему совместимому типу.
Примеры
Числовые типы
Десятичные типы данных
Типы дат
Типы данных DateTime
Типы данных Time64
min2
Впервые представлена в версии: v21.11
Возвращает меньшее из двух числовых значений x и y.
Синтаксис
Аргументы
x— Первое значение(U)Int8/16/32/64илиFloat*илиDecimaly— Второе значение(U)Int8/16/32/64илиFloat*илиDecimal
Возвращаемое значение
Возвращает меньшее из значений x и y. Float64
Примеры
Пример использования
minus
Впервые появилась в версии: v1.1
Вычисляет разность двух значений a и b. Результат всегда знаковый.
Аналогично plus, можно вычитать целое число из даты или даты со временем.
Также поддерживается вычитание между датами со временем, в результате чего получается разница во времени между ними.
Синтаксис
Аргументы
x— уменьшаемое. -y— вычитаемое.
Возвращаемое значение
x минус y
Примеры
Вычитание двух чисел
Вычитание целого числа из даты
modulo
Добавлена в версии: v1.1
Вычисляет остаток от деления двух значений a на b.
Тип результата — целое число, если оба аргумента являются целыми. Если один из аргументов — число с плавающей запятой, тип результата — Float64.
Остаток вычисляется так же, как в C++. Для отрицательных чисел используется усечённое деление.
Выбрасывается исключение при делении на ноль или при делении минимального отрицательного числа на минус один.
Синтаксис
Псевдонимы: mod
Аргументы
a— делимое,b— делитель (модуль)
Возвращаемое значение
Остаток от операции a % b
Примеры
Пример использования
moduloLegacy
Введена в версии: v1.1
Вычисляет остаток от деления. Это устаревшая реализация операции modulo, которая использует оператор C++ %, из‑за чего для отрицательных аргументов могут получаться отрицательные результаты. Эта функция существует для обратной совместимости со старой логикой партиционирования таблиц. Для стандартного поведения используйте modulo или positiveModulo.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает остаток от деления. (U)Int* или Float*
Примеры
Базовое использование
moduloOrNull
Добавлена в версии: v25.5
Вычисляет остаток от деления a на b. Аналогична функции modulo, за исключением того, что moduloOrNull возвращает NULL,
если правый аргумент равен 0.
Синтаксис
Псевдонимы: modOrNull
Аргументы
Возвращаемое значение
Возвращает остаток деления x на y, или null, если делитель равен нулю.
Примеры
moduloOrNull при делении на ноль
moduloOrZero
Появилась в версии: v20.3
Аналог функции modulo, но возвращает ноль, когда делитель равен нулю, в отличие от функции modulo, которая в этом случае генерирует исключение.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает остаток от деления a % b или 0, если делитель равен 0.
Примеры
Пример использования
multiply
Появилась в версии: v1.1
Вычисляет произведение двух значений x и y.
Синтаксис
Аргументы
Возвращаемое значение
Возвращает произведение x на y.
Примеры
Умножение двух чисел
multiplyDecimal
Добавлено в: v22.12
Выполняет операцию умножения над двумя десятичными числами. Результат будет иметь тип Decimal256.
Масштаб результата может быть явно задан аргументом result_scale (константа Integer в диапазоне [0, 76]). Если не задан, масштаб результата равен максимальному масштабу среди переданных аргументов.
Эти функции работают значительно медленнее, чем обычная multiply.
Если вам не требуется строго контролируемая точность и/или нужны быстрые вычисления, рассмотрите возможность использования multiply
Синтаксис
Аргументы
a— Первое значение.Decimalb— Второе значение.Decimalresult_scale— Масштаб результата.(U)Int*
Возвращаемое значение
Результат умножения с указанным масштабом. Тип: Decimal256
Примеры
Пример использования
Чем отличается от обычного умножения
Переполнение типа Decimal
negate
Добавлена в версии: v1.1
Изменяет знак аргумента x. Результат всегда является знаковым числом.
Синтаксис
Аргументы
x— значение, к которому применяется унарный минус.
Возвращаемое значение
Возвращает -x.
Примеры
Пример использования
plus
Введена в версии v1.1
Вычисляет сумму двух значений x и y. Псевдоним: x + y (оператор).
Можно складывать целое число и дату или дату со временем. В первом
случае увеличивается количество дней в дате, во втором случае
увеличивается количество секунд в дате со временем.
Синтаксис
Аргументы
x— левый операнд,y— правый операнд.
Возвращаемое значение
Возвращает сумму x и y.
Примеры
Сложение двух чисел
Сложение целого числа с датой
positiveModulo
Появилась в версии v22.11
Вычисляет остаток от деления x на y. Похожа на функцию
modulo, за исключением того, что positiveModulo всегда возвращает неотрицательное число.
Синтаксис
Псевдонимы: positive_modulo, pmod
Аргументы
Возвращаемое значение
Возвращает разность между x и ближайшим целым числом, не превосходящим
x и кратным y.
Примеры
Пример использования
positiveModuloOrNull
Добавлена в: v25.5
Вычисляет остаток от деления a на b. Аналогична функции positiveModulo, за исключением того, что positiveModuloOrNull вернёт NULL,
если правый аргумент равен 0.
Синтаксис
Псевдонимы: positive_modulo_or_null, pmodOrNull
Аргументы
x— Делимое.(U)Int*/Float32/64. -y— Делитель (модуль).(U)Int*/Float32/64.
Возвращаемое значение
Возвращает разность между x и ближайшим целым числом, не превосходящим
x и кратным y, или null, если делитель равен нулю.
Примеры
positiveModuloOrNull