# LIKE

Выражение `LIKE` используется в [SELECT](select.md)-запросах для
проверки соответствия строк шаблону символов c учетом их регистра. При
совпадении возвращается `true`, в противном случае — `false`. Для
проверки подходят только столбцы, имеющие [строковый тип
данных](../sql_types.md#text).

## Синтаксис {: #syntax }

![LIKE](../../images/ebnf/like.svg)

### Выражение {: #expression }

??? note "Диаграмма"
    ![Expression](../../images/ebnf/expression.svg)

### Литерал {: #literal }

??? note "Диаграмма"
    ![Literal](../../images/ebnf/literal.svg)

## Примеры использования {: #using_examples }

### Простая проверка {: #simple_like }

Пример точного совпадения последовательности символов:

```sql
SELECT type LIKE 'light' FROM warehouse;
```

??? note "Результат"
    ```shell
    +-------+
    | col_1 |
    +=======+
    | false |
    |-------|
    | false |
    |-------|
    | true  |
    |-------|
    | true  |
    |-------|
    | true  |
    +-------+
    (5 rows)
    ```

### Подсчет количества совпадения {: #count_like }

Можно также использовать `LIKE` для подсчета количества совпадений.
Пример:


```sql
SELECT COUNT(*) FROM warehouse WHERE type LIKE 'light';
```

??? note "Результат"
    ```shell
    +-------+
    | col_1 |
    +=======+
    | 3     |
    +-------+
    (1 rows)
    ```

### Использование подстановочных знаков {: #wildcards_like }

Существует два подстановочных знака, которые используются в сочетании с
выражением `LIKE`:

- `%` — _знак процента_ обозначает любое количество любых символов
- `_` — _подчеркивание_ обозначает любой один символ


Пример:

```sql
SELECT item LIKE '%l%s' OR type LIKE 'ligh_' FROM warehouse;
```

??? note "Результат"
    ```sql
    +-------+
    | col_1 |
    +=======+
    | false |
    |-------|
    | true  |
    |-------|
    | true  |
    |-------|
    | true  |
    |-------|
    | true  |
    +-------+
    (5 rows)
    ```

### Экранирование {: #escape_chars }

Экранирование необходимо в тех случаях, когда нужно найти в строке
буквальное вхождение знака процента или подчеркивания. Для этого перед
соответствующим символом в шаблоне нужно добавить спецсимвол. По
умолчанию в качестве спецсимвола выбрана обратная косая черта (`\`):

```sql
CREATE TABLE str(n string primary key);
INSERT INTO str VALUES ('product'), ('product%'), ('*product');
SELECT n FROM str WHERE n LIKE 'product\%';
```

??? note "Результат"
    ```sql
    +------------+
    | n          |
    +============+
    | "product%" |
    +------------+
    (1 rows)
    ```

C помощью предложения `ESCAPE` можно выбрать и другой спецсимвол (букву, знак
пунктуации, но не цифру):

```sql
SELECT n FROM str WHERE n like 'product*%' ESCAPE '*';
```

??? note "Результат"
    ```sql
    +------------+
    | n          |
    +============+
    | "product%" |
    +------------+
    (1 rows)
    ```

Чтобы включить спецсимвол в шаблон поиска, его следует продублировать:

```sql
SELECT n FROM str WHERE n like '**product' ESCAPE '*';
```

??? note "Результат"
    ```sql
    +------------+
    | n          |
    +============+
    | "*product" |
    +------------+
    (1 rows)
    ```
