Упростил примеры.
7.9 KiB
toc_priority | toc_title |
---|---|
37 | Логические функции |
Логические функции
Логические функции производят логические операции над любыми числовыми типами, а возвращают число типа UInt8, равное 0, 1, а в некоторых случаях NULL
.
Ноль в качестве аргумента считается ложью
, а любое ненулевое значение — истиной
.
and
Вычисляет результат логической конъюнкции между двумя и более значениями. Соответствует оператору логического "И".
Синтаксис
and(val1, val2...)
Чтобы вычислять функцию and
по короткой схеме, используйте настройку short_circuit_function_evaluation. Если настройка включена, то выражение vali
вычисляется только для строк, где условие (val1 AND val2 AND ... AND val{i-1})
верно. Например, при выполнении запроса SELECT and(number = 2, intDiv(1, number)) FROM numbers(10)
не будет сгенерировано исключение из-за деления на ноль.
Аргументы
Возвращаемое значение
0
, если среди аргументов есть хотя бы один нуль.NULL
, если среди аргументов нет нулей, но есть хотя бы одинNULL
.1
, в остальных случаях.
Тип: UInt8 или Nullable(UInt8).
Пример
Запрос:
SELECT and(0, 1, -2);
Результат:
┌─and(0, 1, -2)─┐
│ 0 │
└───────────────┘
Со значениями NULL
:
SELECT and(NULL, 1, 10, -2);
Результат:
┌─and(NULL, 1, 10, -2)─┐
│ ᴺᵁᴸᴸ │
└──────────────────────┘
or
Вычисляет результат логической дизъюнкции между двумя и более значениями. Соответствует оператору логического "ИЛИ".
Синтаксис
and(val1, val2...)
Чтобы вычислять функцию or
по короткой схеме, используйте настройку short_circuit_function_evaluation. Если настройка включена, то выражение vali
вычисляется только для строк, где условие ((NOT val1) AND (NOT val2) AND ... AND (NOT val{i-1}))
верно. Например, при выполнении запроса SELECT or(number = 0, intDiv(1, number) != 0) FROM numbers(10)
не будет сгенерировано исключение из-за деления на ноль.
Аргументы
Returned value
1
, если среди аргументов есть хотя бы одно ненулевое число.0
, если среди аргументов только нули.NULL
, если среди аргументов нет ненулевых значений, и естьNULL
.
Тип: UInt8 или Nullable(UInt8).
Пример
Запрос:
SELECT or(1, 0, 0, 2, NULL);
Результат:
┌─or(1, 0, 0, 2, NULL)─┐
│ 1 │
└──────────────────────┘
Со значениями NULL
:
SELECT or(0, NULL);
Результат:
┌─or(0, NULL)─┐
│ ᴺᵁᴸᴸ │
└─────────────┘
not
Вычисляет результат логического отрицания аргумента. Соответствует оператору логического отрицания.
Синтаксис
not(val);
Аргументы
Возвращаемое значение
1
, еслиval
— это0
.0
, еслиval
— это ненулевое число.NULL
, еслиval
— этоNULL
.
Тип: UInt8 или Nullable(UInt8).
Пример
Запрос:
SELECT NOT(1);
Результат:
┌─not(1)─┐
│ 0 │
└────────┘
xor
Вычисляет результат логической исключающей дизъюнкции между двумя и более значениями. При более чем двух значениях функция работает так: сначала вычисляет XOR
для первых двух значений, а потом использует полученный результат при вычислении XOR
со следующим значением и так далее.
Синтаксис
xor(val1, val2...)
Аргументы
Returned value
1
, для двух значений: если одно из значений является нулем, а второе нет.0
, для двух значений: если оба значения одновременно нули или ненулевые числа.NULL
, если среди аргументов хотя бы одинNULL
.
Тип: UInt8 or Nullable(UInt8).
Пример
Запрос:
SELECT xor(0, 1, 1);
Результат:
┌─xor(0, 1, 1)─┐
│ 0 │
└──────────────┘