---
slug: /ru/sql-reference/functions/logical-functions
sidebar_position: 37
sidebar_label: "Логические функции"
---

# Логические функции {#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
or(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 │
└──────────────┘
```
