Поиск по шаблону (LIKE)
Задача
Требуется выбрать строки, соответствующие определенной подстроке или шаблону. Рассмотрим следующий запрос и результирующее множество:
select e.ename, e.job
from emp e
where e.deptno in (10,20);
ENAME JOB
---------- ----------
SMITH CLERK
JONES MANAGER
CLARK MANAGER
SCOTT ANALYST
KING PRESIDENT
ADAMS CLERK
FORD ANALYST
MILLER CLERK
8 rows selected
Из служащих отделов 10 и 20 требуется выбрать только тех, в имени которых встречается буква “I” или чье название должности заканчивается на “ER”.
Решение
Используйте оператор LIKE в сочетании с оператором подставновки SQL (“%”):
select e.ename, e.job
from emp e
where e.deptno in (10,20)
and (e.ename like '%I%' or e.job like '%ER');
ENAME JOB
---------- ----------
SMITH CLERK
JONES MANAGER
CLARK MANAGER
KING PRESIDENT
MILLER CLERK
Обсуждение
При использовании в операции сопоставления с шаблоном LIKE оператор “%” выбирает любую последовательность символов.
Возвращение любой строки, содержащей “I” (в любом месте), обеспечивается заключением шаблона поиска “I” в операторы “%”. Если шаблон поиска не заключенв “%”, результаты запроса зависят от местоположения “%”. Напрммер, чтобы найти названия должностей, закнаивающиеся на “ER”, оператор “%” ставится перед “ER”. Если требуется найти все должности, начинающиеся с “ER”, “%” должен следовать после “ER”.
Для выбора какого-нибудь одного символа предоставляется оператор подчеркивания (“_”). Например, для выбора сотрудников 10 и 20, у которых предпоследняя буква имени “E”.
select e.ename, e.job
from emp e
where e.deptno in (10,20)
and (e.ename like '%E_');
ENAME JOB
---------- ----------
JONES MANAGER
MILLER CLERK