Skip to main content

Логические функции

Логические функции производят логические операции над любыми числовыми типами, а возвращают число типа 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) не будет сгенерировано исключение из-за деления на ноль.

Аргументы

  • val1, val2, ... — список из как минимум двух значений. Int, UInt, Float или Nullable.

Возвращаемое значение

  • 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

Вычисляет результат логической дизъюнкции между двумя и более значениями. Соответствует оператору логического "ИЛИ".

Синтаксис

or(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) не будет сгенерировано исключение из-за деления на ноль.

Аргументы

  • val1, val2, ... — список из как минимум двух значений. Int, UInt, Float или Nullable.

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...)

Аргументы

  • val1, val2, ... — список из как минимум двух значений. Int, UInt, Float или Nullable.

Returned value

  • 1, для двух значений: если одно из значений является нулем, а второе нет.
  • 0, для двух значений: если оба значения одновременно нули или ненулевые числа.
  • NULL, если среди аргументов хотя бы один NULL.

Тип: UInt8 or Nullable(UInt8).

Пример

Запрос:

SELECT xor(0, 1, 1);

Результат:

┌─xor(0, 1, 1)─┐
│ 0 │
└──────────────┘