Предикат подобия

Функция

Определение сравнения на соответствие шаблону.

Спецификация
 
Синтаксические правила
  1. Конструкция:

    < символьное выражение > NOT LIKE < шаблон > 

    эквивалентна:

    NOT (< символьное выражение > LIKE < шаблон >).
  2. Если < 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   |
  3. < Символьное выражение > может быть < UNICODE-типом > или приводиться к нему.

  4. < Символьное выражение > может быть символьным константным выражением, символьным параметром, значимым символьным выражением или их комбинацией.

    Запрос с константным выражением:

    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);
  5. < ESC-символ > используется для отмены действия специальных символов _ и %.

  6. В обычном режиме символ обратного слэша «\» по умолчанию является ESC-символом, в режиме /COMPATIBILITY=STANDARD ESC-символа по умолчанию нет.

  7. Если < ESC-символ > задан, то комбинация < ESC-символ >_, < ESC-символ >%, < ESC-символ >< ESC-символ > в < шаблоне > указывает на то, что специальные символы _ , %, < ESC-символ > должны представлять самих себя.

    Найти все записи, в которых название организации начинается с АОЗТ_:

    select count(1) from "Организации"
     where upper("Название") like 'АОЗТ/_%' escape '/';
  8. Строка шаблона должна гарантировать ее разбивку на следующие последовательности:

    • одиночные не < ESC-символы >;

    • < ESC > + '%';

    • < ESC > + '_';

    • < ESC > + < ESC >.

    Т.е. после < ESC-символа >, которому не предшествует < ESC-символ >, не может стоять символ конца строки или обычный символ, а могут только '%', '_' и < ESC-символ >.

  9. Если < символьное выражение > имеет NULL-значение, то результатом предиката будет ложь (FALSE).

  10. Конструкция < символьное выражение > LIKE < шаблон > истинна (TRUE), если < символьное выражение > соответствует шаблону, и ложна (FALSE) – в противном случае.

    SELECT "Название" FROM "Организации" WHERE
    "Название" LIKE('%О_%') or "Название" LIKE('%Т_%');
  11. Если типом данных < шаблона > является UNICODE, то < символьное выражение > также по возможности приводится к этому типу.

  12. Если в качестве < ESC-символа > задана UNICODE-константа, то второй байт у этой константы должен быть нулевым.

  13. При трансляции запроса с предикатом 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;