В этом учебном пособии вы узнаете, как использовать Oracle оператор LIKE (для выполнения сравнения с шаблоном) с синтаксисом, примерами и практическими упражнениями.
Описание
Oracle условие LIKE позволяет использовать подстановочные символы, которые будут использоваться в операторе WHERE в запросах SELECT, INSERT, UPDATE или DELETE. Это позволяет выполнять сопоставление с pattern (шаблоном).
Синтаксис
Синтаксис LIKE в Oracle/PLSQL:
Параметры или аргументы
expression
Символьное выражение, такие как поле или столбец.
pattern
Символьное выражение, которое содержит сопоставление с pattern. pattern, которые вы можете выбрать:
подстановочный символ |
пояснение |
---|---|
% | Соответствует любой строке любой длины (в том числе нулевой длины) |
_ | Соответствует одному символу |
escape_character
Необязательный. Позволяет проверять наличие литералов подстановочных символов, таких как % или _.
Примечание
Смотрите также Oracle REGEXP_LIKE.
Пример использования % (символ процент)
Первый пример Oracle оператора LIKE, который мы рассмотрим, предполагает использование подстановочного символа %.
Рассмотрим, как % работает в Oracle операторе LIKE. Мы хотим найти всех customers, чьи last_name начинается с 'Ар'.
1 2 3 |
SELECT last_name FROM customers WHERE last_name LIKE 'Ap%'; |
Кроме того, можно использовать несколько символов % в пределах одной строки.
Например:
1 2 3 |
SELECT last_name FROM customers WHERE last_name LIKE '%er%'; |
В этом примере Oracle оператора LIKE, мы ищем для всех customers, чьи last_name содержит символы 'er'.
Пример использования _ (символ подчеркивание)
Далее, давайте рассмотрим, как подстановочный символ _ (символ подчеркивания) работает в Oracle операторе LIKE. Помните, что _ ищет только один символ.
Например:
1 2 3 |
SELECT supplier_name FROM suppliers WHERE supplier_name LIKE 'Sm_th'; |
В этом примере Oracle LIKE вернет всех suppliers, чье supplier_name имеет длину 5 символов, где первые два символа является 'Sm', а последние два символа это 'th'. Например, он может вернуть suppliers, чьи supplier_name являются 'Smith', 'Smyth', 'Smath' или 'Smeth' и т.д.
Вот еще один пример:
1 2 3 |
SELECT * FROM suppliers WHERE account_number LIKE '92314_'; |
Ища номер счета, вы можете обнаружить, что у вас есть только 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'.
Например:
1 2 3 |
SELECT supplier_name FROM suppliers WHERE supplier_name NOT LIKE 'W%'; |
Размещая оператор NOT перед LIKE, вы можете получить всех suppliers, чьи supplier_name не начинаются на 'W'.
Пример использования ESCAPE
Важно понять, каким образом действует escape_character при совпадении с шаблоном. Эти примеры относятся конкретно к пропуску символов в Oracle.
Допустим, вы хотите найти % или _ (символ процента или подчеркивания) в операторе LIKE. Вы можете сделать это с помощью ESCAPE символов.
Обратите внимание, что вы можете определить escape_character (экранирующий символ), как один символ (длина 1).
Например:
1 2 3 |
SELECT * FROM suppliers WHERE supplier_name LIKE 'Water!%' ESCAPE '!'; |
Этот пример LIKE идентифицирует символ ! как экранирующий символ. Этот запрос вернет всех suppliers, чье supplier_name имеют значение 'Water%’.
Вот еще более сложный пример, использования экранирующего символа в операторе LIKE.
1 2 3 |
SELECT * FROM suppliers WHERE supplier_name LIKE 'H%!%' ESCAPE '!'; |
Этот пример Oracle оператора LIKE возвращает всех suppliers, имена которых начинаются с H и заканчиваются на %. Например, это может вернуть значение, такое как 'Hello%'.
Вы также можете использовать escape символ с символом _ в условии LIKE.
Например:
1 2 3 |
SELECT * FROM suppliers WHERE supplier_name LIKE 'H%!_' ESCAPE '!'; |
Этот пример LIKE возвращает всех suppliers, имена которых начинаются с 'H' и заканчиваются на '_'. Например, это может вернуть значение, такое как 'Hello_'.
Часто задаваемые вопросы
Вопрос: Как объединить Oracle функцию UPPER с Oracle оператором LIKE? Я пытаюсь запросить все записи текстового поля, которое содержат слово "test". Проблема заключается в том, что поле может иметь следующие значения: TEST, Test или test.
Ответ: Для того чтобы ответить на этот вопрос, давайте рассмотрим пример.
Давайте предположим, что у нас есть таблица suppliers с полем под названием supplier_name, которое содержит значения TEST, Test или test.
Если мы хотим найти все записи, содержащие слово "test", независимо от того в каком виде они сохранены как TEST, Test или test, то мы могли бы выполнить одно из следующих предложений SELECT:
1 2 3 |
SELECT * FROM suppliers WHERE UPPER(supplier_name) LIKE ('TEST%'); |
ИЛИ
1 2 3 |
SELECT * FROM suppliers WHERE UPPER(supplier_name) LIKE UPPER('test%'); |
Это предложение SELECT, использует комбинацию функции Oracle UPPER и оператора LIKE, чтобы вернуть все записи, где поле supplier_name содержит слово "test", независимо от того, в каком значении оно было сохранено как TEST, Test или test.
Практическое упражнение № 1:
На основании таблицы employees содержащей следующие данные, найти все записи, у которых employee_name заканчивается буквой 'h'.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
CREATE TABLE employees ( employee_number number(10) not null, employee_name varchar2(50) not null, salary number(6), CONSTRAINT employees_pk PRIMARY KEY (employee_number) ); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1001, 'John Smith', 62000); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1002, 'Jane Anderson', 57500); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1003, 'Brad Everest', 71000); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1004, 'Jack Horvath', 42000); |
Решение для практического упражнения № 1:
Следующий оператор SELECT использует Oracle оператор LIKE, чтобы возвратить записи, у которых employee_name заканчивается буквой 'h'.
1 2 3 |
SELECT * FROM employees WHERE employee_name LIKE '%h'; |
Этот запрос вернет следующий результирующий набор:
EMPLOYEE_NUMBER | EMPLOYEE_NAME | SALARY |
---|---|---|
1001 | John Smith | 62000 |
1004 | Jack Horvath | 42000 |
Практическое упражнение № 2:
На основании таблицы employees содержащей следующие данные, найти все записи, в которых employee_name содержит букву 's'.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
CREATE TABLE employees ( employee_number number(10) not null, employee_name varchar2(50) not null, salary number(6), CONSTRAINT employees_pk PRIMARY KEY (employee_number) ); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1001, 'John Smith', 62000); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1002, 'Jane Anderson', 57500); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1003, 'Brad Everest', 71000); INSERT INTO employees (employee_number, employee_name, salary) VALUES (1004, 'Jack Horvath', 42000); |
Решение для практического упражнения № 2:
Следующий оператор SELECT использует Oracle оператор LIKE, чтобы возвратить записи, у которых поле employee_name содержит букву 's'.
1 2 3 |
SELECT * FROM employees WHERE employee_name LIKE '%s%'; |
Это вернет следующий результирующий набор:
EMPLOYEE_NUMBER | EMPLOYEE_NAME | SALARY |
---|---|---|
1002 | Jane Anderson | 57500 |
1003 | Brad Everest | 71000 |
Практическое упражнение № 3:
На основании таблицы employees содержащей следующие данные, найти все записи, в которых supplier_id состоит из 4 цифр и начинается с '500'.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
CREATE TABLE suppliers ( supplier_id varchar2(10) not null, supplier_name varchar2(50) not null, city varchar2(50), CONSTRAINT suppliers_pk PRIMARY KEY (supplier_id) ); INSERT INTO suppliers(supplier_id, supplier_name, city) VALUES ('5008', 'Microsoft', 'New York'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES ('5009', 'IBM', 'Chicago'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES ('5010', 'Red Hat', 'Detroit'); INSERT INTO suppliers (supplier_id, supplier_name, city) VALUES ('5011', 'NVIDIA', 'New York'); |
Решение для практического упражнения № 3:
Следующий оператор SELECT использует Oracle оператор LIKE, чтобы возвратить записи, у которых supplier_id состоит из 4 цифр и начинается с '500'.
1 2 3 |
SELECT * FROM suppliers WHERE supplier_id LIKE '500_'; |
Это вернет следующий результирующий набор:
SUPPLIER_ID | SUPPLIER_NAME | CITY |
---|---|---|
5008 | Microsoft | New York |
5009 | IBM | Chicago |