2017-12-11 12:07:26 +00:00
# Арифметические функции
2017-03-12 17:58:51 +00:00
Для всех арифметических функций, тип результата вычисляется, как минимальный числовой тип, который может вместить результат, если такой тип есть. Минимум берётся одновременно по числу бит, знаковости и "плавучести". Если бит не хватает, то берётся тип максимальной битности.
Пример:
2019-09-23 15:31:46 +00:00
```sql
2017-10-25 05:27:09 +00:00
SELECT toTypeName(0), toTypeName(0 + 0), toTypeName(0 + 0 + 0), toTypeName(0 + 0 + 0 + 0)
```
2017-03-12 17:58:51 +00:00
2019-09-23 15:31:46 +00:00
```text
2017-10-25 05:27:09 +00:00
┌─toTypeName(0)─┬─toTypeName(plus(0, 0))─┬─toTypeName(plus(plus(0, 0), 0))─┬─toTypeName(plus(plus(plus(0, 0), 0), 0))─┐
│ UInt8 │ UInt16 │ UInt32 │ UInt64 │
└───────────────┴────────────────────────┴─────────────────────────────────┴──────────────────────────────────────────┘
```
2017-06-13 04:15:47 +00:00
2017-03-12 17:58:51 +00:00
Арифметические функции работают для любой пары типов из UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64, Float32, Float64.
Переполнение производится также, как в C++.
2017-12-11 12:07:26 +00:00
## plus(a, b), оператор a + b
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Вычисляет сумму чисел.
Также можно складывать целые числа с датой и датой-с -временем. В случае даты, прибавление целого числа означает прибавление соответствующего количества дней. В случае даты-с -временем - прибавление соответствующего количества секунд.
2017-12-11 12:07:26 +00:00
## minus(a, b), оператор a - b
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Вычисляет разность чисел. Результат всегда имеет знаковый тип.
Также можно вычитать целые числа из даты и даты-с -временем. Смысл аналогичен - смотрите выше для plus.
2017-12-11 12:07:26 +00:00
## multiply(a, b), оператор a \* b
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Вычисляет произведение чисел.
2017-12-11 12:07:26 +00:00
## divide(a, b), оператор a / b
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Вычисляет частное чисел. Тип результата всегда является типом с плавающей запятой.
Т о есть, деление не целочисленное. Для целочисленного деления, используйте функцию intDiv.
При делении на ноль получится inf, -inf или nan.
2017-12-11 12:07:26 +00:00
## intDiv(a, b)
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Вычисляет частное чисел. Деление целочисленное, с округлением вниз (по абсолютному значению).
При делении на ноль или при делении минимального отрицательного числа на минус единицу, кидается исключение.
2017-12-11 12:07:26 +00:00
## intDivOrZero(a, b)
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Отличается от intDiv тем, что при делении на ноль или при делении минимального отрицательного числа на минус единицу, возвращается ноль.
2017-12-11 12:07:26 +00:00
## modulo(a, b), оператор a % b
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Вычисляет остаток от деления.
Если аргументы - числа с плавающей запятой, то они предварительно преобразуются в целые числа, путём отбрасывания дробной части.
Берётся остаток в том же смысле, как это делается в C++. По факту, для отрицательных чисел, используется truncated division.
При делении на ноль или при делении минимального отрицательного числа на минус единицу, кидается исключение.
2017-12-11 12:07:26 +00:00
## negate(a), оператор -a
2017-10-25 05:27:09 +00:00
2017-03-12 17:58:51 +00:00
Вычисляет число, обратное по знаку. Результат всегда имеет знаковый тип.
2019-02-08 21:37:56 +00:00
## abs(a) {#arithm_func-abs}
2017-10-25 05:27:09 +00:00
Вычисляет абсолютное значение для числа a. Т о есть, если a < 0, то возвращает -a.
2017-03-12 17:58:51 +00:00
Для беззнаковых типов ничего не делает. Для чисел типа целых с о знаком, возвращает число беззнакового типа.
2017-11-23 08:46:51 +00:00
2017-12-11 12:07:26 +00:00
## gcd(a, b)
2017-11-23 08:46:51 +00:00
Вычисляет наибольший общий делитель чисел.
При делении на ноль или при делении минимального отрицательного числа на минус единицу, кидается исключение.
2017-12-11 12:07:26 +00:00
## lcm(a, b)
2017-11-23 08:46:51 +00:00
Вычисляет наименьшее общее кратное чисел.
При делении на ноль или при делении минимального отрицательного числа на минус единицу, кидается исключение.
2018-10-16 10:47:17 +00:00
[Оригинальная статья ](https://clickhouse.yandex/docs/ru/query_language/functions/arithmetic_functions/ ) <!--hide-->