PostgreSQL условие LIKE — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
В этом учебном пособии вы узнаете, как использовать PostgreSQL условие LIKE с синтаксисом и примерами.
Описание
PostgreSQL условие LIKE позволяет использовать подстановочные символы (метасимволы) в предложении WHERE оператора SELECT, INSERT, UPDATE или DELETE. Это позволяет выполнять сопоставление с pattern.
Синтаксис
Синтаксис для условия LIKE в PostgreSQL:
expression LIKE pattern [ ESCAPE ‘escape_character’ ]
Параметры или аргументы
- expression
- Символьное выражение, такое как поле или столбец.
- pattern
- Символьное выражение, которое содержит сопоставляемый шаблон. Шаблоны, которые вы можете выбрать из:
Подстановочный символ Пояснение % Соответствует любой строке любой длины (в том числе нулевой длины) _ Соответствует одному символу - escape_character
- Необязательный. Это позволяет вам проверять наличие буквенных символов, таких как % или _. Если вы не предоставите escape_character, PostgreSQL предполагает, что
\
является escape_character.
Пример — использование подстановочного символа % (символ знак процента)
Первый пример PostgreSQL LIKE, который мы рассмотрим, включает использование подстановочного символа % (символ знак процента).
Давайте разберем, как подстановочный символ % работает в PostgreSQL условии LIKE. Мы хотим найти всех employees, last_name начинается с ‘Jo’.
SELECT * FROM employees WHERE first_name LIKE ‘Jo%’;
SELECT * FROM employees WHERE first_name LIKE ‘Jo%’; |
Вы также можете использовать подстановочный символ % несколько раз в одной строке. Например,
SELECT * FROM employees WHERE first_name LIKE ‘%od%’;
SELECT * FROM employees WHERE first_name LIKE ‘%od%’; |
В этом PostgreSQL примере условия LIKE мы ищем всех employees, чье first_name содержит символы ‘od’.
Пример — использование подстановочного символа _ (символ подчеркивание)
Далее, давайте рассмотрим, как подстановочный символ _ (символ подчеркивания) работает в PostgreSQL условии LIKE. Помните, что подстановочный символ _ ищет только один символ.
SELECT first_name, last_name FROM employees WHERE first_name LIKE ‘Yoh_n’;
SELECT first_name, last_name FROM employees WHERE first_name LIKE ‘Yoh_n’; |
Этот пример PostgreSQL условия LIKE вернул бы всех suppliers, чье supplier_name имеет длину 5 символов, где первые три символа — «Yoh», а последний — «n». Например, он может возвращать записи таблицы employees, у которых first_name — «Yohan», «Yohen», «Yohin», «Yohon» и т.д.
Вот еще один пример:
SELECT * FROM employees WHERE employee_number LIKE ‘98765_’;
SELECT * FROM employees WHERE employee_number LIKE ‘98765_’; |
Вы можете обнаружить, что ищете номер счета, но у вас есть только 5 из 6 цифр.
987650, 987651, 987652, 987653, 987654, 987655, 987656, 987657, 987658, 987659
Пример — использование оператора NOT
Теперь давайте посмотрим, как вы можете использовать оператор NOT с подстановочными символами.
Давайте использовать подстановочный символ % с оператором NOT. Вы также можете использовать PostgreSQL условие LIKE, чтобы найти записи таблицы employees, чье last_name не начинается с ‘J’.
Например:
SELECT first_name, last_name FROM employees WHERE last_name NOT LIKE ‘J%’;
SELECT first_name, last_name FROM employees WHERE last_name NOT LIKE ‘J%’; |
Поместив оператор NOT перед PostgreSQL условием LIKE, вы сможете получить все записи employees, чье last_name не начинается с ‘J’.
Пример — использование Escape-символов
Важно понимать, как «экранировать символы» когда pattern соответствует. Эти примеры имеют дело с экранированием символов в PostgreSQL.
Допустим, вы хотели найти символ % или _ в условии PostgreSQL LIKE. Вы можете сделать это с помощью символа Escape.
Обратите внимание, что вы можете определить только escape-символ как один символ (длина 1).
Например:
SELECT * FROM employees WHERE last_name LIKE ‘G\%’;
SELECT * FROM employees WHERE last_name LIKE ‘G\%’; |
Поскольку мы не указали escape-символ, PostgreSQL предполагает, что \ это escape-символ. Затем PostgreSQL предполагает, что escape-символ является \ в результате PostgreSQL рассматривает символ % как литерал вместо подстановочного символа. Этот оператор затем возвращает все записи из employees, чье last_name равно G%.
SELECT * FROM employees WHERE last_name LIKE ‘G!%’ ESCAPE ‘!’;
SELECT * FROM employees WHERE last_name LIKE ‘G!%’ ESCAPE ‘!’; |
Этот пример PostgreSQL условия LIKE определяет ! как escape-символ. ! escape-символ приведет к тому, что PostgreSQL будет рассматривать символ % как литерал. В результате этот оператор также вернет все записи из таблицы employees, last_name которых равно G%.
SELECT * FROM employees WHERE last_name LIKE ‘M%\%’;
SELECT * FROM employees WHERE last_name LIKE ‘M%\%’; |
Этот пример PostgreSQL условия LIKE возвращает всех employees, чье last_name начинается с ‘M’ и заканчивается на ‘%’. Например, он вернул бы значение, такое как «Mathison%». Поскольку в условии LIKE мы не указывали escape-символ, PostgreSQL предполагает, что escape-символ является \ что приводит к тому, что PostgreSQL рассматривает второй символ % как литерал вместо подстановочного символа.
Мы могли бы изменить это условие LIKE, указав escape-символ следующим образом:
SELECT * FROM employees WHERE last_name LIKE ‘M%!%’ ESCAPE ‘!’;
SELECT * FROM employees WHERE last_name LIKE ‘M%!%’ ESCAPE ‘!’; |
Этот пример PostgreSQL условия LIKE возвращает все записи из employees, чье last_name начинается с ‘M’ и заканчивается литеральным ‘%’. Например, он будет возвращать значение, такое как «Mathison%».
Вы также можете использовать escape-символ с символом _ в условии PostgreSQL LIKE.
Например:
SELECT * FROM employees WHERE last_name LIKE ‘M%\_’;
SELECT * FROM employees WHERE last_name LIKE ‘M%\_’; |
Опять же, поскольку модификатор ESCAPE не предоставлен, PostgreSQL использует \ как escape-символ, приводящий к символу _, который будет трактоваться как литерал вместо подстановочного символа. В этом примере будут возвращаться все поля из employees, чье last_name начинается с ‘M’ и заканчивается на ‘_’. Например, он вернул бы значение, такое как ‘Mathison_’.
PostgreSQL: Документация: 7.3: Сопоставление с образцом
Существует три отдельных подхода к сопоставлению с образцом.
предоставленный PostgreSQL:
традиционный оператор SQL LIKE
, более поздний SQL99 SIMILAR
Оператор TO
и регулярные выражения в стиле POSIX. Кроме того, доступна функция сопоставления с образцом, SUBSTRING
, с использованием либо
В стиле SQL99 или в стиле POSIX
обычные выражения.
строка LIKE шаблон [экранирующий символ ESCAPE] строка NOT LIKE pattern [ESCAPE escape-character]
Каждый шаблон определяет набор
строк. Выражение LIKE
возвращает true, если строка
содержится в наборе строк, представленных шаблоном. (Как и ожидалось, выражение NOT LIKE
LIKE
возвращает истину, и наоборот
наоборот Эквивалентное выражение НЕ
(строка LIKE pattern).) Если шаблон не содержит
знаки процента или подчеркивания, то шаблон представляет только
сама струна; в таком случае LIKE
действует как оператор равенства. Ан
подчеркивание (_) в шаблоне обозначает (соответствует) любому отдельному
характер; знак процента (%) соответствует
любая строка из нуля или более символов.
Некоторые примеры:
'abc' КАК 'abc' правда 'abc' НРАВИТСЯ 'a%' правда 'abc' КАК '_b_' правда 'abc' НРАВИТСЯ 'c' ложь
LIKE
шаблон всегда соответствует
покрыть всю строку. Чтобы сопоставить шаблон в любом месте
строка, поэтому шаблон должен начинаться и заканчиваться процентом
знак.
Для соответствия литеральному подчеркиванию или знаку процента без соответствующих другим символам, соответствующий символ в шаблону должен предшествовать экранирующий символ. Экранирующий символ по умолчанию — обратная косая черта. но другой можно выбрать с помощью предложения ESCAPE. Чтобы соответствовать escape-символу себя, напишите два escape-символа.
Обратите внимание, что обратная косая черта уже имеет особое значение в
строковые литералы, поэтому написать шаблонную константу, содержащую
обратная косая черта, вы должны написать две обратные косые черты в запросе. Таким образом,
написание шаблона, который фактически соответствует буквальному обратному слэшу
означает запись четырех обратных косых черт в запросе. Вы можете избежать этого
выбрав другой escape-символ с помощью ESCAPE; тогда обратная косая черта не является специальной для НРАВИТСЯ
больше.
Также можно выбрать не escape-символ, написав ПОБЕГ ». Это эффективно отключает аварийный механизм, который делает невозможным выключение особое значение знаков подчеркивания и процентов в шаблон.
Вместо этого можно использовать ключевое слово ILIKE. LIKE, чтобы сделать совпадение нечувствителен в зависимости от активной локали. Это не в стандарт SQL, но Расширение PostgreSQL.
Оператор ~~ эквивалентен LIKE
, а ~~* соответствует ILIKE
. Существуют также операторы !~~ и !~~*.
которые представляют НЕ КАК
и НЕ ПОДХОДИТ
. Все эти операторы
специфичны для PostgreSQL.
строка ПОДОБНО шаблону [ESCAPE escape-character] строка НЕ ПОДОБНА шаблону [ESCAPE escape-character]
Оператор ПОДОБНЫЙ
возвращает true или false в зависимости от того, соответствует ли его шаблон
заданная строка. Это очень похоже на ТАКЖЕ
, за исключением того, что он интерпретирует шаблон
используя определение SQL99 для
регулярное выражение. Регулярные выражения SQL99 любопытны.
пересечение LIKE
обозначения и
общепринятая нотация регулярных выражений.
Подобно ПОДОБНО
, оператор ПОДОБНО
работает успешно, только если его
шаблон соответствует всей строке; это не похоже на обычное
практика регулярных выражений, в которой шаблон может соответствовать любому
часть строки. Тоже нравится КАК
, ПОДОБНО
TO
использует % и _ в качестве подстановочных знаков, обозначающих любую строку и
любой одиночный символ, соответственно (они сравнимы с
.* и . в
регулярные выражения POSIX).
В дополнение к этим средствам, заимствованным из ПОДОБНЫЙ
, ПОДОБНЫЙ
TO
поддерживает эти метасимволы сопоставления с образцом.
заимствовано из регулярных выражений POSIX:
| обозначает чередование (либо из двух вариантов).
* означает повторение предыдущий элемент ноль или более раз.
+ обозначает повторение предыдущий элемент один или несколько раз.
Круглые скобки () могут использоваться для группировать элементы в один логический элемент.
Выражение в квадратных скобках […] указывает класс символов, как и в обычном POSIX выражения.
Обратите внимание, что ограниченное повторение (? и {…}) не предоставляются, хотя они существуют в POSIX. Кроме того, точка (.) не метасимвол.
Как и LIKE
, обратная косая черта
отключает особое значение любого из этих метасимволов; или
с помощью ESCAPE можно указать другой escape-символ.
Некоторые примеры:
'abc' ПОХОЖЕ НА 'abc' правда 'abc' ПОХОЖЕ НА 'a' ложь 'abc' АНАЛОГИЧНО '%(b|d)%' правда 'abc' ПОДОБНО '(b|c)%' ложь
Функция SUBSTRING
с
три параметра, SUBSTRING(
, обеспечивают извлечение
подстрока, соответствующая шаблону регулярного выражения SQL99. Как
с SIMILAR TO указанный шаблон
должна соответствовать всей строке данных, иначе функция не работает
и возвращает ноль. Чтобы указать часть узора,
должен быть возвращен в случае успеха, SQL99 указывает, что шаблон
должен содержать два вхождения escape-символа, за которым следует
двойными кавычками («). Сопоставление текста
часть шаблона между этими маркерами
вернулся. string
FROM pattern FOR escape)
Некоторые примеры:
SUBSTRING('foobar' FROM '%#"o_b#"%' ДЛЯ '#') oob SUBSTRING('foobar' FROM '#"o_b#"%' FOR '#') NULL
Таблица 6-11 перечисляет доступные операторы для сопоставления с образцом с использованием POSIX обычные выражения.
Таблица 6-11. Совпадение с регулярным выражением Операторы
Оператор | Описание | Пример |
---|---|---|
~ | Соответствует регулярному выражению с учетом регистра | ‘Томас’ ~ ‘. *томас.*’ |
~* | Соответствует регулярному выражению, без учета регистра | ‘томас’ ~* ‘.*Томас.*’ |
!~ | Не соответствует регулярному выражению, регистр чувствительный | ‘Томас’ !~ ‘.*Томас.*’ |
!~* | Не соответствует регулярному выражению, регистр бесчувственный | ‘Томас’ !~* ‘.*вадим.*’ |
Регулярные выражения POSIX
предоставить более мощные средства для сопоставления с образцом, чем ПОДОБНО
и ПОДОБНО
операторам. Многие инструменты Unix, такие как
егреп, сед,
или awk использовать язык сопоставления с образцом
это похоже на то, что описано здесь.
Регулярное выражение — это последовательность символов,
сокращенное определение набора строк ( обычный набор ). Говорят, что строка соответствует
регулярное выражение, если оно входит в регулярное множество
описывается регулярным выражением. Как и в случае с LIKE
, символы шаблона соответствуют строке
символов точно, если они не являются специальными символами в
язык регулярных выражений — но регулярные выражения используют
другие специальные символы, чем 9(b|c)’ ложно
Функция SUBSTRING
с
два параметра, SUBSTRING(
, обеспечивают извлечение
подстрока, соответствующая шаблону регулярного выражения POSIX. Это
возвращает null, если совпадений нет, в противном случае часть
текст, соответствующий образцу. Но если шаблон содержит какие-либо
круглые скобки, часть текста, совпадающая с первой
заключенное в скобки подвыражение (то, у которого левая скобка
идет первым) возвращается. Вы всегда можете поставить круглые скобки вокруг
все выражение, если вы хотите использовать в нем круглые скобки
не вызывая это исключение. string
FROM pattern)
Некоторые примеры:
SUBSTRING('foobar' FROM 'o.b') oob SUBSTRING('foobar' FROM 'o(.)b') o
Регулярные выражения (RE), определенные в POSIX 1003.2, бывают двух видов: современные RE (примерно ереп; 1003.2 называет эти RE «расширенными» RE) и устаревшие RE (примерно те, что в ed; 1003.2 «базовые» РЕ). PostgreSQL реализует современную форму.
A (современный) RE — это одна или несколько непустых ветвей , разделенных символом |. Соответствует всему, что соответствует одному из ветви.
Филиал один или несколько штук , объединены. Он соответствует совпадению для первого, за которым следует совпадение для второго и т. д.
Кусочек атом возможно за которым следует одна *, +, ? или , связанная с . Атом, за которым следует *, соответствует последовательности из 0 или более совпадений атом. Атом, за которым следует +, соответствует последовательность из 1 или более совпадений атома. Атом, за которым следует ? соответствует последовательности из 0 или 1 совпадений атома.
Связанный { за которым следует десятичное целое число без знака, возможно за ним следует , возможно за которым следует другое десятичное целое число без знака, за которым всегда следует к }. Целые числа должны лежать между 0 и RE_DUP_MAX (255) включительно, а если их два, первый не может превышать второго. Ан атом, за которым следует граница, содержащая одно целое число i, и запятая не соответствует последовательности точно я соответствует атому. Атом, за которым следует граница, содержащая одно целое число i и запятую, соответствует последовательности i или более совпадений атома. Атом, за которым следует граница, содержащая два целых числа i и j соответствует последовательности от i до j (включительно) совпадений атом. 9.[$()|*+?{\ (соответствует этому символу, взятому как обычный символ), за которым следует \ любым другим символом (соответствующим этому символу, взятому за обычный символ, как если бы \ имел отсутствовал) или одиночный символ без других значение (соответствие этому символу). A { за которым следует символ, отличный от цифры, обычный символ, а не начало привязки. Это Недопустимо заканчивать RE символом \.
Обратите внимание, что обратная косая черта (\) уже имеет особое значение в строковых литералах, поэтому для написания шаблона константа, которая содержит обратную косую черту, вы должны написать два обратную косую черту в запросе. 9, он соответствует любому один символ (но см. ниже) не из остального списка. Если два символа в списке разделены -, это сокращение для полного диапазона символы между этими двумя (включительно) в сопоставлении последовательность, например [0-9] в ASCII соответствует любому десятичному знаку цифра. Для двух диапазонов запрещено совместно использовать конечную точку, например. туз. Диапазоны очень зависимые от последовательности сопоставления, и переносимые программы должны избегайте полагаться на них.
Чтобы включить литерал ] в список, сделайте его первым символом (после возможного ^). Чтобы включить литерал -, сделайте его первым или последним символом, или вторая конечная точка диапазона. Чтобы использовать литерал — в качестве первой конечной точки диапазона, заключите его в [. и .] чтобы сделать его элементом сопоставления (см. ниже). С исключением из этих и некоторых комбинаций с использованием [ (см. следующие абзацы), все остальные специальные символы, включая \, теряют свое особое значение выражение в квадратных скобках.
В выражении в квадратных скобках элемент сопоставления (a символ, последовательность из нескольких символов, которая сопоставляется так, как если бы были одним символом или именем последовательности сопоставления для либо) заключенный в [. и .] обозначает последовательность символов этого сортировочный элемент. Последовательность представляет собой отдельный элемент список выражений скобок. Выражение в квадратных скобках, содержащее Таким образом, многосимвольный элемент сопоставления может соответствовать более чем один символ, например если последовательность сопоставления включает ch группирующий элемент, затем RE [[. ch.]]*c соответствует первым пяти персонажи chchcc. 9] являются все синонимы. Класс эквивалентности не может быть конечной точкой диапазон.
В выражении в квадратных скобках имя класса символов заключенный в [: и :] обозначает список всех символов принадлежность к этому классу. Стандартные имена классов персонажей: альбом, альфа, пустой, цифра, печать, пункт, пространство, верхний, xdigit. Они обозначают классы персонажей определено в ctype. Локаль может предоставлять другие. Класс символов нельзя использовать в качестве конечной точки диапазон.
Есть два особых случая выражений со скобками: скобочные выражения [[:<:]] и [[:>:]] соответствует нулевой строке в начало и конец слова соответственно. Слово определяется как последовательность словесных символов, которая не предшествует и не за которыми следуют символы слова. Словесный символ — это альбом символ (как определено ctype) или символ подчеркивания. Это расширение, совместимое, но не специфицированное POSIX 1003.2 и должен быть использовать с осторожностью в программном обеспечении, предназначенном для переноса на другие системы.
В случае, если RE может соответствовать более чем одной подстроке заданной строки, RE соответствует тому, который начинается раньше всего в Струна. Если RE может соответствовать более чем одной подстроке начиная с этого момента, он соответствует самому длинному. Подвыражения также соответствуют максимально длинным подстрокам с учетом ограничение, чтобы весь матч был как можно дольше, с подвыражения, начинающиеся раньше в RE, имеют приоритет над те, которые начинаются позже. Обратите внимание, что подвыражения более высокого уровня таким образом иметь приоритет над компонентом более низкого уровня подвыражения.
Длина соответствия измеряется в символах, без сортировки элементы. Нулевая строка считается более длинной, чем отсутствие совпадения в все. xX].
Нет особых ограничений на длину RE, за исключением случаев, когда память ограничена. Использование памяти примерно линейно в RE размер и в значительной степени нечувствителен к сложности RE, за исключением ограниченные повторения. Ограниченные повторения реализуются с помощью макрорасширение, которое требует больших временных и пространственных затрат, если считать большие или ограниченные повторения вложены друг в друга. RE как, скажем, ((((а{1100}){1100}){1100}){1100}){1100} будет (в конечном итоге) запускать почти любую существующую машину из подкачки космос. [1]
Главная | Ник МакКаллум
Эй, Ник здесь! Эта страница представляет собой бесплатный отрывок из моего курса «Основы SQL» за 99 долларов.
Если вы хотите пройти полный курс, нажмите здесь, чтобы зарегистрироваться и создать учетную запись.
У меня есть 30-дневная гарантия удовлетворения, так что нет никакого риска (и масса преимуществ!) при записи на этот курс и повышении уровня ваших навыков SQL сегодня!
Этот урок познакомит вас с сопоставлением с образцом в SQL. В частности, вы узнаете, как использовать операторы SQL LIKE и SQL ILIKE.
Введение в сопоставление с образцом SQL
Мы уже видели, как проверить, точно ли строка соответствует заданному значению. Например, следующий SQL-запрос, который мы видели ранее в этом курсе, будет содержать все строки из таблицы staff
, где имя сотрудника Mike
:
SELECT *
FROM staff
WHERE NOT first_name=’Mike’
Сопоставление с образцом значительно расширяет наши возможности по работе со строками в SQL.
Сопоставление с образцом — это действие по сравнению с общим образцом в строке. Вот несколько примеров сопоставления с образцом:
- Проверка слова на соответствие первой букве
A
- Проверка слова, чтобы увидеть, заканчивается ли оно на
ion
- Проверка ввода электронной почты, чтобы узнать, заканчивается ли он на
@hotmail.com
или@gmail.com
Чтобы выполнить сопоставление с образцом в SQL, мы используем операторы LIKE и ILIKE в сочетании со специальными подстановочными знаками.
Сначала мы обсудим подстановочные символы.
Подстановочные знаки в SQL
В SQL есть два подстановочных знака: %
и _
. У них немного другой функционал.
Символ %
используется для замены любой последовательности символов в SQL. Например, %a
соответствует любому слову, оканчивающемуся на a
.
Символ _
используется для замены любого одиночного символа _ в SQL. Например, ` a вернет любое двухбуквенное слово, оканчивающееся на
a`.
Мы можем комбинировать эти подстановочные знаки с операторами LIKE и ILIKE для создания запросов SQL. Мы рассмотрим это далее.
Операторы SQL LIKE и ILIKE используются в сочетании с предложениями WHERE для поиска строк, удовлетворяющих определенным характеристикам подстановочных знаков.
Общий синтаксис оператора LIKE (или ILIKE) приведен ниже:
SELECT имя_столбца ОТ имя_таблицы ГДЕ строка LIKE wildcard_string;
Операторы LIKE и ILIKE функционально эквивалентны, за исключением одного важного отличия: оператор LIKE чувствителен к регистру, а оператор ILIKE не чувствителен к регистру.
Давайте посмотрим на несколько примеров операторов LIKE и ILIKE в действии.
Во-первых, давайте напишем запрос, который возвращает title
каждого фильма
, заканчивающегося на a
.
Для начала просто выберем титры из фильма
таблицы:
ВЫБЕРИТЕ заголовок ИЗ пленки;
Далее мы должны добавить операторы WHERE и LIKE. Поскольку нам нужны все фильмы, оканчивающиеся на a
, мы будем использовать подстановочный знак %
:
SELECT title ИЗ фильма ГДЕ title LIKE '%a';
Для нашего второго примера давайте создадим список всех фильмов, в которых есть только одно слово. Это более сложный пример, для которого потребуется несколько подстановочных знаков, а также оператор НЕ.
Для начала давайте снова начнем с простого создания списка всех заголовков из пленка
таблица:
ВЫБЕРИТЕ название ИЗ пленки;
Далее нам нужно выяснить, как исключить заголовки, в которых есть пробел.