Оператор PostgreSQL LIKE используется для сопоставления текстовых значений с шаблоном с использованием подстановочных знаков. Если поисковое выражение может быть сопоставлено с выражением шаблона, оператор LIKE вернет true, равное 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 |
Где заработная плата :: текст, как «200%» Находит любые значения, которые начинаются с 200 |
2 |
Где заработная плата :: текст, как «% 200%» Находит любые значения, которые имеют 200 в любой позиции |
3 |
Где заработная плата :: текст, как «_00%» Находит любые значения, которые имеют 00 во второй и третьей позиции |
4 |
ГДЕ НАЛОГОВЫЙ :: текст НРАВИТСЯ ‘2 _% _%’ Находит любые значения, которые начинаются с 2 и имеют длину не менее 3 символов |
5 |
Где заработная плата :: текст, как «% 2» Находит любые значения, которые заканчиваются на 2 |
6 |
Где заработная плата :: текст как ‘_2% 3’ Находит любые значения, которые имеют 2 во второй позиции и заканчиваются на 3 |
7 |
Где заработная плата :: текст, как «2___3» Находит любые значения в пятизначном числе, которые начинаются с 2 и заканчиваются на 3 |
Где заработная плата :: текст, как «200%»
Находит любые значения, которые начинаются с 200
Где заработная плата :: текст, как «% 200%»
Находит любые значения, которые имеют 200 в любой позиции
Где заработная плата :: текст, как «_00%»
Находит любые значения, которые имеют 00 во второй и третьей позиции
ГДЕ НАЛОГОВЫЙ :: текст НРАВИТСЯ ‘2 _% _%’
Находит любые значения, которые начинаются с 2 и имеют длину не менее 3 символов
Где заработная плата :: текст, как «% 2»
Находит любые значения, которые заканчиваются на 2
Где заработная плата :: текст как ‘_2% 3’
Находит любые значения, которые имеют 2 во второй позиции и заканчиваются на 3
Где заработная плата :: текст, как «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)
Ниже приведен пример, в котором будут отображаться все записи из таблицы COMPANY, в которых ADDRESS будет содержать дефис (-) внутри текста —
testdb=# SELECT * FROM COMPANY WHERE ADDRESS LIKE '%-%';
Это даст следующий результат —