Арифметические функции
Обзор
Арифметические функции работают для любых двух операндов типов UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32 или Float64.
Перед выполнением операции оба операнда приводятся к типу результата. Тип результата определяется следующим образом (если иное не указано в документации по функции ниже):
- Если оба операнда имеют разрядность не более 32 бит, размер типа результата будет равен размеру следующего более крупного типа по сравнению с большим из двух
операндов (promotion целочисленного размера). Например,
UInt8 + UInt16 = UInt32илиFloat32 * Float32 = Float64. - Если один из операндов имеет разрядность 64 бита или больше, размер типа результата будет таким же, как размер большего из двух операндов. Например,
UInt32 + UInt128 = UInt128илиFloat32 * Float64 = Float64. - Если один из операндов является знаковым типом, тип результата также будет знаковым, в противном случае — беззнаковым. Например,
UInt32 * Int32 = Int64.
Эти правила гарантируют, что тип результата будет наименьшим типом, который может представлять все возможные результаты. Хотя это и создаёт риск переполнения около границ диапазона значений, оно обеспечивает быстрое выполнение вычислений с использованием максимальной нативной целочисленной разрядности в 64 бита. Такое поведение также гарантирует совместимость со многими другими базами данных, которые предоставляют 64-битные целые числа (BIGINT) как максимальный целочисленный тип.
Пример:
Переполнения возникают так же, как в C++.
abs
Появилось в версии: v1.1
Вычисляет абсолютное значение x. Не влияет на результат, если x имеет беззнаковый тип. Если x имеет знаковый тип, возвращает беззнаковое число.
Синтаксис
Аргументы
x— число, для которого вычисляется абсолютное значение
Возвращаемое значение
Абсолютное значение x
Примеры
Пример использования
avg2
Добавлена в версии: v25.11
Вычисляет и возвращает среднее значение переданных аргументов. Поддерживает числовые и временные типы.
Синтаксис
Аргументы
x1, x2]— Принимает два значения и вычисляет их среднее.
Возвращаемое значение
Возвращает среднее значение переданных аргументов, приведённое к наибольшему совместимому типу.
Примеры
Числовые типы
Типы Decimal
Типы данных 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 (константное целое число в диапазоне [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, ...]— Принимает одно или несколько значений, по которым вычисляется среднее.
Возвращаемое значение
Возвращает среднее значение переданных аргументов, приведённое к наибольшему совместимому типу.
Примеры
Числовые типы
Десятичные типы
Типы данных Date
Типы данных 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.
Масштаб результата (scale) может быть явно задан аргументом result_scale (константное целочисленное значение типа Integer в диапазоне [0, 76]). Если он не задан, масштаб результата равен максимальному масштабу среди указанных аргументов.
Эти функции работают значительно медленнее, чем обычная multiply.
Если вам не требуется контролируемая точность и/или необходима высокая скорость вычислений, рассмотрите возможность использования multiply
Синтаксис
Аргументы
a— Первое значение.Decimalb— Второе значение.Decimalresult_scale— Масштаб результата.(U)Int*
Возвращаемое значение
Результат умножения с заданным масштабом. Тип: Decimal256
Примеры
Пример использования
Отличия по сравнению с обычным умножением
Переполнение десятичного типа
negate
Добавлена в: v1.1
Изменяет знак аргумента x. Результат всегда знаковый.
Синтаксис
Аргументы
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