Предикат подобия
Функция
Определение сравнения на соответствие шаблону.
Спецификация
::=
::=
::=
Синтаксические правила
-
Конструкция:
< символьное выражение > NOT LIKE < шаблон >
эквивалентна:
NOT (< символьное выражение > LIKE < шаблон >).
-
Если
< ESC-символ >
не указан, то символ подчеркивания (_) в < шаблоне > представляет собой указатель на произвольный символ в < символьном выражении >, знак процента (%) в < шаблоне > представляет указатель на подстроку (возможно, пустую), а каждый символ в < шаблоне >, отличный от знаков подчеркивания и процента, представляет сам себя.select distinct make from auto where upper(make) LIKE ('%MOTOR%'); |AMERICAN MOTORS | |GENERAL MOTORS |
select distinct bodytype from auto where upper(bodytype) LIKE ('_E%'); |SEDAN | |SEDAN HARDTOP |
-
< Символьное выражение >
может быть< UNICODE-типом >
или приводиться к нему. -
< Символьное выражение >
может быть символьным константным выражением, символьным параметром, значимым символьным выражением или их комбинацией.Запрос с константным выражением:
select distinct make, bodytype from auto where bodytype like ('SE'||'DAN'||'%');
Запрос с параметром:
select distinct make, bodytype from auto where bodytype like ('SE'||'DAN'||?);
Запрос с символьной функцией:
select * from auto where serialno LIKE 'L9791' + substr(serialno,6);
-
< ESC-символ >
используется для отмены действия специальных символов _ и %. -
В обычном режиме символ обратного слэша «\» по умолчанию является ESC-символом, в режиме /COMPATIBILITY=STANDARD ESC-символа по умолчанию нет.
-
Если
< ESC-символ >
задан, то комбинация< ESC-символ >_
,< ESC-символ >%
,< ESC-символ >< ESC-символ >
в< шаблоне >
указывает на то, что специальные символы _ , %,< ESC-символ >
должны представлять самих себя.Найти все записи, в которых название организации начинается с АОЗТ_:
select count(1) from "Организации" where upper("Название") like 'АОЗТ/_%' escape '/';
-
Строка шаблона должна гарантировать ее разбивку на следующие последовательности:
-
одиночные не
< ESC-символы >
; -
< ESC > + '%';
-
< ESC > + '_';
-
< ESC > + < ESC >.
Т.е. после
< ESC-символа >
, которому не предшествует< ESC-символ >
, не может стоять символ конца строки или обычный символ, а могут только '%', '_' и< ESC-символ >
. -
-
Если
< символьное выражение >
имеет NULL-значение, то результатом предиката будет ложь (FALSE). -
Конструкция
< символьное выражение > LIKE < шаблон >
истинна (TRUE), если< символьное выражение >
соответствует шаблону, и ложна (FALSE) – в противном случае.SELECT "Название" FROM "Организации" WHERE "Название" LIKE('%О_%') or "Название" LIKE('%Т_%');
-
Если типом данных
< шаблона >
является UNICODE, то< символьное выражение >
также по возможности приводится к этому типу. -
Если в качестве
< ESC-символа >
задана UNICODE-константа, то второй байт у этой константы должен быть нулевым. -
При трансляции запроса с предикатом LIKE выполняется проверка аргумента на правильность использования
< ESC-символа >
.create or replace table ttt3(c char(10) check (c like 'a~qaa' escape '~')); create or replace table ttt3(c char(10) check (c like 'a~_aa' escape '~')); create or replace table ttt3(c char(10) check (c like 'a~%aa' escape '~')); create or replace table ttt3(c char(10) check (c like 'a~~aa' escape '~')); insert into ttt3 values ('aaa'); !914: запись не удовлетворяет условию CHECK insert into ttt3 values ('a~qaa'); !914: запись не удовлетворяет условию CHECK insert into ttt3 values ('aqaa'); !914: запись не удовлетворяет условию CHECK insert into ttt3 values (' '); !914: запись не удовлетворяет условию CHECK insert into ttt3 values ('a~aa'); !ok insert into ttt3 values (NULL); !ok drop table ttt3;