LIKE оператор

В этом учебном пособии вы узнаете, как использовать Oracle оператор LIKE (для выполнения сравнения с шаблоном) с синтаксисом, примерами и практическими упражнениями.

Описание

Oracle условие LIKE позволяет использовать подстановочные символы, которые будут использоваться в операторе WHERE в запросах SELECT, INSERT, UPDATE или DELETE. Это позволяет выполнять сопоставление с pattern (шаблоном).

Синтаксис

Синтаксис LIKE в Oracle/PLSQL:

expression LIKE pattern [ ESCAPE 'escape_character' ]

Параметры или аргументы

expression

Символьное выражение, такие как поле или столбец.

pattern

Символьное выражение, которое содержит сопоставление с pattern. pattern, которые вы можете выбрать:

подстановочный
символ
пояснение
% Соответствует любой строке любой длины (в том числе нулевой длины)
_ Соответствует одному символу

escape_character
Необязательный. Позволяет проверять наличие литералов подстановочных символов, таких как % или _.

Примечание

Смотрите также Oracle REGEXP_LIKE.

Пример использования % (символ процент)

Первый пример Oracle оператора LIKE, который мы рассмотрим, предполагает использование подстановочного символа %.

Рассмотрим, как % работает в Oracle операторе LIKE. Мы хотим найти всех customers, чьи last_name начинается с 'Ар'.

Кроме того, можно использовать несколько символов % в пределах одной строки.

Например:

В этом примере Oracle оператора LIKE, мы ищем для всех customers, чьи last_name содержит символы 'er'.

Пример использования _ (символ подчеркивание)

Далее, давайте рассмотрим, как подстановочный символ _ (символ подчеркивания) работает в Oracle операторе LIKE. Помните, что _ ищет только один символ.

Например:

В этом примере Oracle LIKE вернет всех suppliers, чье supplier_name имеет длину 5 символов, где первые два символа является 'Sm', а последние два символа это 'th'. Например, он может вернуть suppliers, чьи supplier_name являются 'Smith', 'Smyth', 'Smath' или 'Smeth' и т.д.

Вот еще один пример:

Ища номер счета, вы можете обнаружить, что у вас есть только 5 из 6 цифр. В приведенном выше примере, будет возвращено потенциально 10 последних записей (где отсутствующее значение может быть от 0 до 9). Например, запрос может вернуть suppliers, чьи account_number являются:

923140, 923141, 923142, 923143, 923144, 923145, 923146, 923147, 923148, 923149

Пример использования оператора NOT

Далее, давайте рассмотрим то, как вы будете использовать Oracle оператор NOT с подстановочными символами.

Давайте использовать % с оператором NOT. Кроме того, можно использовать Oracle оператор LIKE для поиска suppliers (поставщиков), имена которых не начинаются на 'W'.

Например:

Размещая оператор NOT перед LIKE, вы можете получить всех suppliers, чьи supplier_name не начинаются на 'W'.

Пример использования ESCAPE

Важно понять, каким образом действует escape_character при совпадении с шаблоном. Эти примеры относятся конкретно к пропуску символов в Oracle.

Допустим, вы хотите найти % или _ (символ процента или подчеркивания) в операторе LIKE. Вы можете сделать это с помощью ESCAPE символов.

Обратите внимание, что вы можете определить escape_character (экранирующий символ), как один символ (длина 1).

Например:

Этот пример LIKE идентифицирует символ ! как экранирующий символ. Этот запрос вернет всех suppliers, чье supplier_name имеют значение 'Water%’.

Вот еще более сложный пример, использования экранирующего символа в операторе LIKE.

Этот пример Oracle оператора LIKE возвращает всех suppliers, имена которых начинаются с H и заканчиваются на %. Например, это может вернуть значение, такое как 'Hello%'.

Вы также можете использовать escape символ с символом _ в условии LIKE.

Например:

Этот пример LIKE возвращает всех suppliers, имена которых начинаются с 'H' и заканчиваются на '_'. Например, это может вернуть значение, такое как 'Hello_'.

Часто задаваемые вопросы

Вопрос: Как объединить Oracle функцию UPPER с Oracle оператором LIKE? Я пытаюсь запросить все записи текстового поля, которое содержат слово "test". Проблема заключается в том, что поле может иметь следующие значения: TEST, Test или test.

Ответ: Для того чтобы ответить на этот вопрос, давайте рассмотрим пример.

Давайте предположим, что у нас есть таблица suppliers с полем под названием supplier_name, которое содержит значения TEST, Test или test.

Если мы хотим найти все записи, содержащие слово "test", независимо от того в каком виде они сохранены как TEST, Test или test, то мы могли бы выполнить одно из следующих предложений SELECT:

ИЛИ

Это предложение SELECT, использует комбинацию функции Oracle UPPER и оператора LIKE, чтобы вернуть все записи, где поле supplier_name содержит слово "test", независимо от того, в каком значении оно было сохранено как TEST, Test или test.

Практическое упражнение № 1:

На основании таблицы employees содержащей следующие данные, найти все записи, у которых employee_name заканчивается буквой 'h'.

Решение для практического упражнения № 1:

Следующий оператор SELECT использует Oracle оператор LIKE, чтобы возвратить записи, у которых employee_name заканчивается буквой 'h'.

Этот запрос вернет следующий результирующий набор:

EMPLOYEE_NUMBER EMPLOYEE_NAME SALARY
1001 John Smith 62000
1004 Jack Horvath 42000

Практическое упражнение № 2:

На основании таблицы employees содержащей следующие данные, найти все записи, в которых employee_name содержит букву 's'.

Решение для практического упражнения № 2:

Следующий оператор SELECT использует Oracle оператор LIKE, чтобы возвратить записи, у которых поле employee_name содержит букву 's'.

Это вернет следующий результирующий набор:

EMPLOYEE_NUMBER EMPLOYEE_NAME SALARY
1002 Jane Anderson 57500
1003 Brad Everest 71000

Практическое упражнение № 3:

На основании таблицы employees содержащей следующие данные, найти все записи, в которых supplier_id состоит из 4 цифр и начинается с '500'.

Решение для практического упражнения № 3:

Следующий оператор SELECT использует Oracle оператор LIKE, чтобы возвратить записи, у которых supplier_id состоит из 4 цифр и начинается с '500'.

Это вернет следующий результирующий набор:

SUPPLIER_ID SUPPLIER_NAME CITY
5008 Microsoft New York
5009 IBM Chicago