LIKE¶
Выражение LIKE используется в SELECT-запросах для
проверки соответствия строк шаблону символов c учетом их регистра. При
совпадении возвращается true, в противном случае — false. Для
проверки подходят только столбцы, имеющие строковый тип
данных.
Синтаксис¶
Выражение¶
Диаграмма
Литерал¶
Диаграмма
Примеры использования¶
Простая проверка¶
Пример точного совпадения последовательности символов:
SELECT type LIKE 'light' FROM warehouse;
Результат
+-------+
| col_1 |
+=======+
| false |
|-------|
| false |
|-------|
| true |
|-------|
| true |
|-------|
| true |
+-------+
(5 rows)
Подсчет количества совпадения¶
Можно также использовать LIKE для подсчета количества совпадений.
Пример:
SELECT COUNT(*) FROM warehouse WHERE type LIKE 'light';
Результат
+-------+
| col_1 |
+=======+
| 3 |
+-------+
(1 rows)
Использование подстановочных знаков¶
Существует два подстановочных знака, которые используются в сочетании с
выражением LIKE:
%— знак процента обозначает любое количество любых символов_— подчеркивание обозначает любой один символ
Пример:
SELECT item LIKE '%l%s' OR type LIKE 'ligh_' FROM warehouse;
Результат
+-------+
| col_1 |
+=======+
| false |
|-------|
| true |
|-------|
| true |
|-------|
| true |
|-------|
| true |
+-------+
(5 rows)
Экранирование¶
Экранирование необходимо в тех случаях, когда нужно найти в строке
буквальное вхождение знака процента или подчеркивания. Для этого перед
соответствующим символом в шаблоне нужно добавить спецсимвол. По
умолчанию в качестве спецсимвола выбрана обратная косая черта (\):
CREATE TABLE str(n string primary key);
INSERT INTO str VALUES ('product'), ('product%'), ('*product');
SELECT n FROM str WHERE n LIKE 'product\%';
Результат
+------------+
| n |
+============+
| "product%" |
+------------+
(1 rows)
C помощью предложения ESCAPE можно выбрать и другой спецсимвол (букву, знак
пунктуации, но не цифру):
SELECT n FROM str WHERE n like 'product*%' ESCAPE '*';
Результат
+------------+
| n |
+============+
| "product%" |
+------------+
(1 rows)
Чтобы включить спецсимвол в шаблон поиска, его следует продублировать:
SELECT n FROM str WHERE n like '**product' ESCAPE '*';
Результат
+------------+
| n |
+============+
| "*product" |
+------------+
(1 rows)