Арифметические функции
Обзор
Арифметические функции работают для любых двух операндов типов 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
Примеры
Пример использования
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