Оператор LIKE в PostgreSQL
LIKE в PostgreSQL используется для поиска текстовых значений по шаблону. С его помощью можно найти строки, которые начинаются с нужного фрагмента, заканчиваются определенным набором символов или содержат подстроку внутри значения.
Оператор LIKE часто применяют в условиях WHERE вместе с подстановочными знаками: % означает любое количество символов, а _ — один символ. В статье разберем синтаксис LIKE, примеры шаблонов, поиск по началу, концу и части строки, отличие LIKE от обычного равенства и когда может понадобиться ILIKE для поиска без учета регистра.
Что внутри:
- что делает оператор LIKE в PostgreSQL;
- синтаксис WHERE column LIKE pattern;
- подстановочный знак %;
- подстановочный знак _;
- поиск строк, начинающихся с нужного текста;
- поиск строк, заканчивающихся нужным текстом;
- поиск подстроки внутри значения;
- сочетание % и _ в одном шаблоне;
- чем LIKE отличается от оператора =;
- когда использовать ILIKE;
- примеры SQL-запросов.
Оператор LIKE используется для сопоставления текстовых значений с шаблоном, использующим подстановочные знаки. Если искомое выражение может быть сопоставлено с выражением шаблона, оператор LIKE вернет значение true, что равно 1.
Существует два подстановочных знака, используемых в связке с оператором LIKE:
- Знак процента (%)
- Нижнее подчеркивание (_)
Знак процента представляет собой ноль, один или несколько чисел или символов. Подчеркивание представляет собой одну цифру или символ. Эти символы можно комбинировать.
Если какой-либо из этих двух знаков не используется вместе с LIKE, то LIKE действует как оператор равенства.
Синтаксис
Базовый синтаксис % и _ выглядит следующим образом:
SELECT FROM table_name WHERE column LIKE 'XXXX%'
или
SELECT FROM table_name WHERE column LIKE '%XXXX%'
или
SELECT FROM table_name WHERE column LIKE 'XXXX_'
или
SELECT FROM table_name WHERE column LIKE '_XXXX'
или
SELECT FROM table_name WHERE column LIKE '_XXXX_'
Вы можете комбинировать N-ое число условий с использованием операторов AND или OR. В данном случае XXXX может быть любым числовым или строковым значением.
Пример
В таблице ниже приведены примеры, где часть WHERE содержит различные условия LIKE с операторами '%' и '_':
|
S. No. |
Команда и Описание |
|
1 |
WHERE SALARY::text LIKE '200%' Находит все значения, которые начинаются с 200 |
|
2 |
WHERE SALARY::text LIKE '%200%' Находит все значения, содержащие 200 в любой позиции |
|
3 |
WHERE SALARY::text LIKE '_00%' Находит любые значения, которые имеют 00 во второй и третьей позициях |
|
4 |
WHERE SALARY::text LIKE '2_%_%' Находит любые значения, начинающиеся с 2 и у которых как минимум 3 символа в длину |
|
5 |
WHERE SALARY::text LIKE '%2' Находит любые значения, заканчивающиеся на 2 |
|
6 |
WHERE SALARY::text LIKE '_2%3' Находит любые значения, имеющие 2 во второй позиции и оканчивающиеся на 3 |
|
7 |
WHERE SALARY::text LIKE '2___3' Находит любые значения в пятизначном числе, которые начинаются с 2 и заканчиваются на 3 |
LIKE сравнивает только строки. Следовательно, нам нужно преобразовать столбец в строку, как это сделано в примерах выше.
Давайте рассмотрим реальный пример, возьмем таблицу COMPANY:
# select * from COMPANY; id | name | age | address | salary ----+-------+-----+-----------+-------- 1 | Paul | 32 | California| 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | South-Hall| 45000 7 | James | 24 | Houston | 10000 (7 rows)
Ниже пример команды, который отобразит все записи из таблицы COMPANY, где AGE начинается с 2:
testdb=# SELECT * FROM COMPANY WHERE AGE::text LIKE '2%';
Результат будет следующим:
id | name | age | address | salary ----+-------+-----+-------------+-------- 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | South-Hall | 45000 7 | James | 24 | Houston | 10000 8 | Paul | 24 | Houston | 20000 (7 rows)
Следующий пример отобразит все записи, где ADDRESS содержит тире (-) внутри текста:
testdb=# SELECT * FROM COMPANY WHERE ADDRESS LIKE '%-%';
Результат будет следующим:
id | name | age | address | salary ----+------+-----+-------------------------------------------+-------- 4 | Mark | 25 | Rich-Mond | 65000 6 | Kim | 22 | South-Hall | 45000 (2 rows)
FAQ
Вопрос: Что делает LIKE в PostgreSQL?
Ответ: LIKE сравнивает текстовое значение с шаблоном. Если строка соответствует шаблону, условие возвращает true и строка попадает в результат запроса.
Вопрос: Что означает % в LIKE?
Ответ: Символ % означает ноль, один или любое количество символов. Например, LIKE 'abc%' найдет строки, которые начинаются с abc.
Вопрос: Что означает _ в LIKE?
Ответ: Символ _ означает ровно один любой символ. Например, LIKE 'a_c' подойдет для строк abc, axc или a1c.
Вопрос: Чем LIKE отличается от ILIKE?
Ответ: LIKE учитывает регистр символов, а ILIKE выполняет поиск без учета регистра. ILIKE удобно использовать, когда нужно найти текст независимо от заглавных и строчных букв.
Вопрос: Можно ли использовать LIKE без % и _?
Ответ: Да, но в таком случае LIKE работает почти как сравнение на равенство: строка должна совпасть с шаблоном целиком.
- Функции для работы со строками PostgreSQL
- PostgreSQL: типы данных
- PostgreSQL: ограничения
- PostgreSQL: функции и операции даты/времени
- DBeaver: создание подключения



