PostgreSQL - предложение LIKE
PostgreSQL LIKEОператор используется для сопоставления текстовых значений с шаблоном с использованием подстановочных знаков. Если выражение поиска может быть сопоставлено с выражением шаблона, оператор LIKE вернет истину, т.е.1.
В сочетании с оператором LIKE используются два подстановочных знака:
- Знак процента (%)
- Подчеркивание (_)
Знак процента представляет собой ноль, одну или несколько цифр или символов. Подчеркивание представляет собой одно число или символ. Эти символы можно использовать в комбинациях.
Если любой из этих двух знаков не используется вместе с предложением LIKE, то LIKE действует как оператор равенства.
Синтаксис
Основной синтаксис% и _ выглядит следующим образом:
SELECT FROM table_name
WHERE column LIKE 'XXXX%'
or
SELECT FROM table_name
WHERE column LIKE '%XXXX%'
or
SELECT FROM table_name
WHERE column LIKE 'XXXX_'
or
SELECT FROM table_name
WHERE column LIKE '_XXXX'
or
SELECT FROM table_name
WHERE column LIKE '_XXXX_'
Вы можете объединить N условий, используя операторы И или ИЛИ. Здесь XXXX может быть любым числовым или строковым значением.
пример
Вот несколько примеров, показывающих, что часть WHERE имеет другое предложение LIKE с операторами '%' и '_':
С. Нет. | Заявление и описание |
---|---|
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 |
Postgres 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)
Ниже приведен пример, в котором будут отображаться все записи из таблицы КОМПАНИЯ, где АДРЕС будет иметь дефис (-) внутри текста -
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)