Предикат подобия
Функция
Определение сравнения на соответствие шаблону.
Спецификация
::=::=::=Синтаксические правила
-
Конструкция:
< символьное выражение > 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;