Обзор
Арифметические функции применимы к любым двум операндам типа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.
abs
Добавленный в: v1.1.0 Вычисляет абсолютное значениеx. Не имеет эффекта, если x имеет беззнаковый тип. Если x имеет знаковый тип, возвращает беззнаковое число.
Синтаксис
x— Значение, для которого вычисляется абсолютное значение
x
Примеры
Пример использования
Query
Response
avg2
Добавленный в: v25.11.0 Вычисляет и возвращает среднее значение указанных аргументов. Поддерживает числовые и временные типы. Синтаксисx1, x2]— Принимает два значения для вычисления среднего.
Query
Response
Query
Response
Query
Response
Query
Response
Query
Response
byteSwap
Добавленный в: v23.10.0 Меняет порядок байтов целого числа на обратный, то есть изменяет его порядок байтов. Приведённый ниже пример можно разобрать следующим образом:- Преобразуйте целое число из десятичной системы в эквивалентное шестнадцатеричное представление в формате 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*
Примеры
Пример использования
Query
Response
Query
Response
Query
Response
Query
Response
Query
Response
divide
Добавленный в: v1.1.0 Вычисляет частное двух значенийa и b. Тип результата всегда — Float64.
Для целочисленного деления используется функция intDiv.
При делении на
0 возвращается inf, -inf или nan.x— Делимое -y— Делитель
Query
Response
Query
Response
divideDecimal
Добавленный в: v22.12.0 Выполняет деление двух десятичных чисел. Результирующее значение имеет тип Decimal256. Масштаб результата можно явно задать с помощью аргументаresult_scale (константный Integer в диапазоне [0, 76]). Если он не указан, масштаб результата будет равен максимальному масштабу среди переданных аргументов.
Эта функция работает значительно медленнее, чем обычная
divide.
Если вам не требуется контролируемая точность и/или нужны быстрые вычисления, используйте divide.x— Первое значение: Decimal. -y— Второе значение: Decimal. -result_scale— Указанный масштаб результата. Тип: Int/UInt.
Decimal256
Примеры
Пример 1
Query
Response
Query
Response
divideOrNull
Добавленный в: v25.5.0 Аналогичноdivide, но при делении на ноль возвращает NULL.
Синтаксис
x— делимое -y— делитель
x на y, или NULL.
Примеры
Деление на ноль
Query
Response
gcd
Добавленный в: v1.1.0 Возвращает наибольший общий делитель двух значений a и b. Исключение генерируется при делении на ноль или при делении минимального отрицательного числа на -1. Синтаксисx— Первое целое число -y— Второе целое число
x и y.
Примеры
Пример использования
Query
Response
ifNotFinite
Добавленный в: v20.3.0 Проверяет, является ли число с плавающей запятой конечным. Аналогичный результат можно получить с помощью тернарного оператора:isFinite(x) ? x : y.
Синтаксис
x, еслиxявляется конечным.y, еслиxне является конечным.
Query
Response
intDiv
Добавленный в: v1.1.0 Выполняет целочисленное деление значенияx на y. Иными словами,
вычисляет частное, округлённое вниз до ближайшего меньшего целого числа.
Результат имеет ту же разрядность, что и делимое (первый параметр).
Исключение генерируется при делении на ноль, если частное не помещается
в диапазон делимого, или при делении минимального отрицательного числа на минус один.
Синтаксис
x— Левый операнд. -y— Правый операнд.
x на y
Примеры
Целочисленное деление двух чисел с плавающей точкой
Query
Response
Query
Response
intDivOrNull
Добавленный в: v25.5.0 То же, что иintDiv, но возвращает NULL при делении на ноль или при делении
наименьшего отрицательного числа на минус единицу.
Синтаксис
x на y или NULL.
Примеры
Целочисленное деление на ноль
Query
Response
Query
Response
intDivOrZero
Добавленный в: v1.1.0 То же, что иintDiv, но возвращает ноль при делении на ноль или при делении
наименьшего отрицательного числа на минус единицу.
Синтаксис
a на b, либо ноль.
Примеры
Целочисленное деление на ноль
Query
Response
Query
Response
isFinite
Добавленный в: v1.1.0 Возвращает1, если аргумент Float32, Float64 или BFloat16 не является бесконечным и не равен NaN,
в противном случае возвращает 0.
Синтаксис
1, если x не является бесконечным и не равно NaN, иначе 0.
Примеры
Проверка, является ли число конечным
Query
Response
isInfinite
Добавленный в: v1.1.0 Возвращает1, если аргумент типа Float32, Float64 или BFloat16 является бесконечностью; в противном случае возвращает 0.
Обратите внимание, что для NaN также возвращается 0.
Синтаксис
1, если x бесконечно, иначе — 0 (в том числе для NaN).
Примеры
Проверка, является ли число бесконечным
Query
Response
isNaN
Добавленный в: v1.1.0 Возвращает1, если аргумент типа Float32, Float64 или BFloat16 имеет значение NaN, в противном случае возвращает 0.
Синтаксис
1, если значение равно NaN, иначе 0
Примеры
Пример использования
Query
Response
kqlBin
Добавлено в: v26.8.0 Округляет значение вниз до величины, кратнойroundTo, — так же, как функция bin() в Kusto Query Language.
Правило зависит от типов аргументов: число округляется арифметически, timespan (представляющий собой Interval) округляется по timespan, а дата и время также округляются по timespan. В KQL значение даты и времени — это DateTime64; более узкие типы-носители DateTime и Date отклоняются, так как они не способны представить любой bin, который может вернуть дата и время в KQL.
Эта функция обеспечивает работу bin() при dialect = 'kusto'. Она не предназначена для прямого вызова из SQL.
Синтаксис
value— число, timespan или дата и время (DateTime64). -roundTo— размер бина.
value, округлённое вниз до ближайшего кратного roundTo.
Примеры
number
Query
Response
Query
Response
Query
Response
kqlBinAt
Добавлено в: v26.8.0 Округляет значение вниз до кратногоbinSize, отсчитываемого от fixedPoint, — так же, как это делает bin_at() в Kusto Query Language. Границы бинов могут оказаться как до, так и после фиксированной точки.
Правило зависит от типов аргументов: число округляется арифметически, timespan (то есть Interval) округляется по timespan, отсчитываемому от timespan, а дата и время округляются по timespan, отсчитываемому от фиксированной точки типа дата и время. Дата и время в KQL — это DateTime64; более узкие типы DateTime и Date не принимаются, поскольку они не способны представить все бины, которые может выдать дата и время в KQL.
Эта функция обеспечивает работу bin_at() при dialect = 'kusto'. Она не предназначена для прямого вызова из SQL.
Синтаксис
value— число, timespan или дата и время (DateTime64). -binSize— размер бина. -fixedPoint— точка, от которой отсчитываются bins.
value, округлённое вниз до ближайшего кратного binSize, отсчитываемого от fixedPoint.
Примеры
число
Query
Response
Query
Response
kqlDateTimeBinAt
Добавлено в: v26.8.0 Округляет значение даты и времени вниз до ближайшего кратного timespan, отсчитываемого от фиксированной точки даты и времени. Синтаксисvalue— округляемые дата и время. -binSize— размер бина. -fixedPoint— фиксированная точка даты и времени.
kqlDivide
Добавлено в: v26.8.0 Деление в том виде, в каком его определяет Kusto Query Language: два целочисленных операнда делятся с целочисленным результатом, поэтому7 / 2 даёт 3, а два операнда типа timespan (то есть значения Interval) делятся с вещественным результатом, поэтому 15ms / 10ms даёт 1.5. Любые другие сочетания типов операндов делятся так же, как в divide.
Эта функция реализует оператор / при dialect = 'kusto'. Она не предназначена для прямого вызова из SQL.
Синтаксис
x— делимое. -y— делитель.
intDiv(x, y), если оба аргумента — целые числа; отношение тиков интервалов, если оба аргумента — интервалы; в остальных случаях — divide(x, y).
Примеры
целые числа
Query
Response
Query
Response
Query
Response
kqlMultiply
Добавлено в: v26.8.0 Умножение в том виде, в каком его определяет Kusto Query Language: timespan (Interval) умножается на число, стоящее с любой стороны, поэтому 2 * 1h — это два часа. Два аргумента без интервала перемножаются так же, как в multiply.
Эта функция реализует оператор * при dialect = 'kusto'. Она не предназначена для прямого вызова из SQL.
Синтаксис
x— число или timespan. -y— число либо timespan, еслиx— число.
Query
Response
Query
Response
kqlRangeCount
Добавлено в: v26.8.0 Количество строк, которые возвращает источникrange языка Kusto Query Language: floor((to - from) / step) + 1, но не меньше нуля. Границы и шаг задаются числами, либо значениями даты и времени
с шагом в виде timespan (то есть Interval), либо значениями timespan; временные формы
подсчитываются в целых наносекундах, что нельзя выразить одной операцией деления в ClickHouse.
Целые числа и decimal-значения подсчитываются точно, а не через Float64.
Эта функция обеспечивает работу источника range при dialect = 'kusto'. Её не предполагается
вызывать напрямую из SQL.
Синтаксис
from— Первое значение диапазона. -to— Значение, за которое диапазон не выходит. -step— Разность между двумя соседними значениями.
Query
Response
Query
Response
lcm
Добавленный в: v1.1.0 Возвращает наименьшее общее кратное двух значенийx и y.
Генерируется исключение при делении на ноль или при делении минимального отрицательного числа на минус один.
Синтаксис
x и y. (U)Int*
Примеры
Пример использования
Query
Response
max2
Добавленный в: v21.11.0 Возвращает большее из двух числовых значенийx и y.
Синтаксис
x— Первое значение(U)Int8/16/32/64илиFloat*, илиBFloat16, илиDecimaly— Второе значение(U)Int8/16/32/64илиFloat*, илиBFloat16, илиDecimal
x и y. Float64
Примеры
Пример использования
Query
Response
midpoint
Добавленный в: v25.11.0 Вычисляет и возвращает среднее значение переданных аргументов. Поддерживает числовые и временные типы. Синтаксисx1[, x2, ...]— Принимает одно или несколько значений для вычисления среднего.
Query
Response
Query
Response
Query
Response
Query
Response
Query
Response
min2
Добавленный в: v21.11.0 Возвращает меньшее из двух числовых значенийx и y.
Синтаксис
x— Первое значение(U)Int8/16/32/64илиFloat*, илиBFloat16, илиDecimaly— Второе значение(U)Int8/16/32/64илиFloat*, илиBFloat16, илиDecimal
x и y. Float64
Примеры
Пример использования
Query
Response
minus
Добавленный в: v1.1.0 Вычисляет разность двух значенийa и b. Результат всегда знаковый.
Как и в случае с plus, из значения типа дата или дата и время можно вычитать целое число.
Кроме того, поддерживается вычитание между значениями типа дата и время, в результате которого получается разница во времени между ними.
Также можно вычесть Time или Time64 из DateTime или DateTime64;
значение времени применяется как смещение в секундах. DateTime минус Time даёт
DateTime, а любая комбинация с DateTime64 или Time64 даёт DateTime64
с максимальным масштабом из двух аргументов.
Синтаксис
x— Уменьшаемое. -y— Вычитаемое.
Query
Response
Query
Response
modulo
Добавленный в: v1.1.0 Вычисляет остаток от деления значения a на значение b. Тип результата — целое число, если оба входных значения целые. Если одно из входных значений — число с плавающей точкой, тип результата — Float64. Остаток вычисляется так же, как в C++. Для отрицательных чисел используется усечённое деление. При делении на ноль или при делении минимального отрицательного числа на минус единицу генерируется исключение. Синтаксисmod
Аргументы
a— Делимое -b— Делитель (модуль)
a на b
Примеры
Пример использования
Query
Response
moduloLegacy
Добавленный в: v1.1.0 Вычисляет остаток от деления. Это устаревшая реализация modulo, использующая оператор% из C++, который может возвращать отрицательные результаты для отрицательных аргументов. Эта функция существует для обратной совместимости со старой логикой партиционирования таблиц. Для стандартного поведения используйте modulo или positiveModulo.
Синтаксис
(U)Int* или Float*
Примеры
Базовое использование
Query
Response
moduloOrNull
Добавленный в: v25.5.0 Вычисляет остаток при деленииa на b. Аналогична функции modulo, но moduloOrNull возвращает NULL,
если операция в противном случае привела бы к исключению с плавающей запятой. Для аргументов с плавающей точкой это происходит только в случае,
если делитель равен 0; для целочисленных аргументов это также включает случай, когда минимальное отрицательное значение берется по модулю -1
(например, -128 % -1 для Int8).
Синтаксис
modOrNull
Аргументы
Возвращаемое значение
Возвращает остаток от деления x на y или NULL, если операция привела бы к исключению с плавающей запятой:
когда делитель равен нулю или, для целочисленных аргументов, при вычислении минимального отрицательного значения по модулю -1.
Примеры
moduloOrNull при делении на ноль
Query
Response
Query
Response
moduloOrZero
Добавленный в: v20.3.0 Какmodulo, но для целочисленных результатов возвращает ноль вместо исключения в тех случаях, когда операция иначе привела бы к
исключению. Для результатов с плавающей запятой нулевой делитель даёт NaN.
Синтаксис
a % b. Для целочисленных результатов возвращает 0 в тех случаях, когда операция иначе сгенерировала бы исключение.
Для результатов с плавающей запятой нулевой делитель даёт NaN.
Примеры
Нулевой целочисленный делитель
Query
Response
Query
Response
multiply
Добавленный в: v1.1.0 Вычисляет произведение двух значенийx и y.
Синтаксис
x и y
Примеры
Умножение двух чисел
Query
Response
multiplyDecimal
Добавленный в: v22.12.0 Выполняет умножение двух десятичных чисел. Результирующее значение будет иметь тип Decimal256. Масштаб результата можно явно задать аргументомresult_scale (константный Integer в диапазоне [0, 76]). Если он не указан, масштаб результата будет равен максимальному масштабу переданных аргументов.
Эти функции работают значительно медленнее, чем обычная
multiply.
Если вам не нужна контролируемая точность и/или важна высокая скорость вычислений, рассмотрите использование multiplya— Первое значение.Decimalb— Второе значение.Decimalresult_scale— Масштаб результата.(U)Int*
Decimal256
Примеры
Пример использования
Query
Response
Query
Response
Query
Response
Query
Response
negate
Добавленный в: v1.1.0 Меняет знак аргументаx на противоположный. Результат всегда знаковый.
Синтаксис
x— Значение, знак которого нужно изменить на противоположный.
Query
Response
plus
Добавленный в: v1.1.0 Вычисляет сумму двух значенийx и y. Псевдоним: x + y (оператор).
Можно складывать целое число и дату или дату и время. В первом случае
увеличивается число дней в дате, во втором —
число секунд в дате и времени.
Также можно складывать дату и время. При сложении Date и Time
получается DateTime. При сложении Date и Time64, а также Date32 и
Time или Time64, получается DateTime64.
При сложении Time или Time64 с DateTime или DateTime64 значение времени
применяется как смещение в секундах. DateTime плюс Time даёт DateTime,
любая комбинация с участием DateTime64 или Time64 даёт DateTime64
с максимальной точностью (scale) из двух аргументов.
Синтаксис
x— Левый операнд. -y— Правый операнд.
x и y
Примеры
Сложение двух чисел
Query
Response
Query
Response
Query
Response
positiveModulo
Добавленный в: v22.11.0 Вычисляет остаток от деленияx на y. Аналогична функции
modulo, но positiveModulo всегда возвращает неотрицательное число.
Синтаксис
positive_modulo, pmod
Аргументы
Возвращаемое значение
Возвращает разность между x и ближайшим к нему целым числом, которое не превышает
x и делится на y.
Примеры
Пример использования
Query
Response
positiveModuloOrNull
Добавленный в: v25.5.0 Вычисляет остаток от деленияa на b. Аналогична функции positiveModulo, но positiveModuloOrNull возвращает NULL,
если операция в противном случае привела бы к исключению с плавающей запятой. Для аргументов с плавающей запятой это происходит только,
когда делитель равен 0; для целочисленных аргументов сюда также относится минимальное отрицательное значение по модулю -1
(например, -128 % -1 для Int8).
Синтаксис
positive_modulo_or_null, pmodOrNull
Аргументы
x— Делимое.(U)Int*/Float32/64. -y— Делитель (модуль).(U)Int*/Float32/64.
x и ближайшим целым числом, не превышающим
x и кратным y, или NULL, если операция привела бы к исключению с плавающей запятой: когда делитель равен нулю или, для целочисленных аргументов, при вычислении остатка от минимального отрицательного значения по модулю -1.
Примеры
positiveModuloOrNull при делении на ноль
Query
Response
Query
Response
sqr
Добавленный в: v26.7.0 Вычисляет квадрат значенияx.
Синтаксис
x на x.
Примеры
Возведение числа в квадрат
Query
Response