mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-23 16:12:01 +00:00
816bd7184f
Упростил примеры.
195 lines
7.9 KiB
Markdown
195 lines
7.9 KiB
Markdown
---
|
||
toc_priority: 37
|
||
toc_title: "Логические функции"
|
||
---
|
||
|
||
# Логические функции {#logicheskie-funktsii}
|
||
|
||
Логические функции производят логические операции над любыми числовыми типами, а возвращают число типа [UInt8](../../sql-reference/data-types/int-uint.md), равное 0, 1, а в некоторых случаях `NULL`.
|
||
|
||
Ноль в качестве аргумента считается `ложью`, а любое ненулевое значение — `истиной`.
|
||
|
||
## and {#logical-and-function}
|
||
|
||
Вычисляет результат логической конъюнкции между двумя и более значениями. Соответствует [оператору логического "И"](../../sql-reference/operators/index.md#logical-and-operator).
|
||
|
||
**Синтаксис**
|
||
|
||
``` sql
|
||
and(val1, val2...)
|
||
```
|
||
|
||
Чтобы вычислять функцию `and` по короткой схеме, используйте настройку [short_circuit_function_evaluation](../../operations/settings/settings.md#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](../../sql-reference/data-types/int-uint.md), [UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) или [Nullable](../../sql-reference/data-types/nullable.md).
|
||
|
||
**Возвращаемое значение**
|
||
|
||
- `0`, если среди аргументов есть хотя бы один нуль.
|
||
- `NULL`, если среди аргументов нет нулей, но есть хотя бы один `NULL`.
|
||
- `1`, в остальных случаях.
|
||
|
||
Тип: [UInt8](../../sql-reference/data-types/int-uint.md) или [Nullable](../../sql-reference/data-types/nullable.md)([UInt8](../../sql-reference/data-types/int-uint.md)).
|
||
|
||
**Пример**
|
||
|
||
Запрос:
|
||
|
||
``` sql
|
||
SELECT and(0, 1, -2);
|
||
```
|
||
|
||
Результат:
|
||
|
||
``` text
|
||
┌─and(0, 1, -2)─┐
|
||
│ 0 │
|
||
└───────────────┘
|
||
```
|
||
|
||
Со значениями `NULL`:
|
||
|
||
``` sql
|
||
SELECT and(NULL, 1, 10, -2);
|
||
```
|
||
|
||
Результат:
|
||
|
||
``` text
|
||
┌─and(NULL, 1, 10, -2)─┐
|
||
│ ᴺᵁᴸᴸ │
|
||
└──────────────────────┘
|
||
```
|
||
|
||
## or {#logical-or-function}
|
||
|
||
Вычисляет результат логической дизъюнкции между двумя и более значениями. Соответствует [оператору логического "ИЛИ"](../../sql-reference/operators/index.md#logical-or-operator).
|
||
|
||
**Синтаксис**
|
||
|
||
``` sql
|
||
and(val1, val2...)
|
||
```
|
||
|
||
Чтобы вычислять функцию `or` по короткой схеме, используйте настройку [short_circuit_function_evaluation](../../operations/settings/settings.md#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](../../sql-reference/data-types/int-uint.md), [UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) или [Nullable](../../sql-reference/data-types/nullable.md).
|
||
|
||
**Returned value**
|
||
|
||
- `1`, если среди аргументов есть хотя бы одно ненулевое число.
|
||
- `0`, если среди аргументов только нули.
|
||
- `NULL`, если среди аргументов нет ненулевых значений, и есть `NULL`.
|
||
|
||
Тип: [UInt8](../../sql-reference/data-types/int-uint.md) или [Nullable](../../sql-reference/data-types/nullable.md)([UInt8](../../sql-reference/data-types/int-uint.md)).
|
||
|
||
**Пример**
|
||
|
||
Запрос:
|
||
|
||
``` sql
|
||
SELECT or(1, 0, 0, 2, NULL);
|
||
```
|
||
|
||
Результат:
|
||
|
||
``` text
|
||
┌─or(1, 0, 0, 2, NULL)─┐
|
||
│ 1 │
|
||
└──────────────────────┘
|
||
```
|
||
|
||
Со значениями `NULL`:
|
||
|
||
``` sql
|
||
SELECT or(0, NULL);
|
||
```
|
||
|
||
Результат:
|
||
|
||
``` text
|
||
┌─or(0, NULL)─┐
|
||
│ ᴺᵁᴸᴸ │
|
||
└─────────────┘
|
||
```
|
||
|
||
## not {#logical-not-function}
|
||
|
||
Вычисляет результат логического отрицания аргумента. Соответствует [оператору логического отрицания](../../sql-reference/operators/index.md#logical-negation-operator).
|
||
|
||
**Синтаксис**
|
||
|
||
``` sql
|
||
not(val);
|
||
```
|
||
|
||
**Аргументы**
|
||
|
||
- `val` — значение. [Int](../../sql-reference/data-types/int-uint.md), [UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) или [Nullable](../../sql-reference/data-types/nullable.md).
|
||
|
||
**Возвращаемое значение**
|
||
|
||
- `1`, если `val` — это `0`.
|
||
- `0`, если `val` — это ненулевое число.
|
||
- `NULL`, если `val` — это `NULL`.
|
||
|
||
Тип: [UInt8](../../sql-reference/data-types/int-uint.md) или [Nullable](../../sql-reference/data-types/nullable.md)([UInt8](../../sql-reference/data-types/int-uint.md)).
|
||
|
||
**Пример**
|
||
|
||
Запрос:
|
||
|
||
``` sql
|
||
SELECT NOT(1);
|
||
```
|
||
|
||
Результат:
|
||
|
||
``` test
|
||
┌─not(1)─┐
|
||
│ 0 │
|
||
└────────┘
|
||
```
|
||
|
||
## xor {#logical-xor-function}
|
||
|
||
Вычисляет результат логической исключающей дизъюнкции между двумя и более значениями. При более чем двух значениях функция работает так: сначала вычисляет `XOR` для первых двух значений, а потом использует полученный результат при вычислении `XOR` со следующим значением и так далее.
|
||
|
||
**Синтаксис**
|
||
|
||
``` sql
|
||
xor(val1, val2...)
|
||
```
|
||
|
||
**Аргументы**
|
||
|
||
- `val1, val2, ...` — список из как минимум двух значений. [Int](../../sql-reference/data-types/int-uint.md), [UInt](../../sql-reference/data-types/int-uint.md), [Float](../../sql-reference/data-types/float.md) или [Nullable](../../sql-reference/data-types/nullable.md).
|
||
|
||
**Returned value**
|
||
|
||
- `1`, для двух значений: если одно из значений является нулем, а второе нет.
|
||
- `0`, для двух значений: если оба значения одновременно нули или ненулевые числа.
|
||
- `NULL`, если среди аргументов хотя бы один `NULL`.
|
||
|
||
Тип: [UInt8](../../sql-reference/data-types/int-uint.md) or [Nullable](../../sql-reference/data-types/nullable.md)([UInt8](../../sql-reference/data-types/int-uint.md)).
|
||
|
||
**Пример**
|
||
|
||
Запрос:
|
||
|
||
``` sql
|
||
SELECT xor(0, 1, 1);
|
||
```
|
||
|
||
Результат:
|
||
|
||
``` text
|
||
┌─xor(0, 1, 1)─┐
|
||
│ 0 │
|
||
└──────────────┘
|
||
```
|