Системы обработки информации - язык баз данных SQL

<Предикат like> (<like predicate>)


Функция

Специфицирует сравнение по совпадению с образцом.

Формат

<like predicate> ::=

<column specification> [NOT] LIKE <pattern>

[ESCAPE <escape character>]

<pattern> ::=

<value specification>

<escape character> ::=

<value specification>

Синтаксические правила

  • <Спецификация столбца> (<column specification>) должна указывать на столбец символьных строк.
  • Тип данных <образца> (<pattern>) должен быть типом символьных строк.
  • Тип данных <символа escape> (<escape character>) должен быть типом символьных строк длины 1.
  • Общие правила

  • Пусть x обозначает значение, указываемое <спецификацией столбца> (<column specification>), и пусть y обозначает результат <спецификации значения> (<value specification>) <образца> (<pattern>).
  • Тогда:


    a) Если указывается <символ escape> (<escapecharacter>), то:


    i) Пусть z обозначает результат <спецификации значения> (<value specification>) <символа escape> (<escape character>).


    ii) Должно существовать разбиение строки y на подстроки такое, что каждая подстрока имеет длину 1 или 2, никакая подстрока длины 1 не содержит символа escape z, и каждая подстрока длины 2 начинается с символа escape z, за которым следует либо символ escape z, либо символ подчеркивания, либо символ знака процента. В этом разбиении y каждая подстрока длины 2 представляет одно вхождение второго символа этой подстроки. Каждая подстрока длины 1, содержащая символ подчеркивания, представляет спецификатор произвольного символа. Каждая подстрока длины 1, содержащая знак процента, представляет спецификатор произвольной строки. Каждая подстрока длины 1, не содержащая ни символа подчеркивания, ни символа знака процента, представляет символ, который она содержит.


    b) Если <символ escape> (<escape character>) не указан, то каждый символ подчеркивания в y представляет спецификатор произвольного символа, каждый символ знака процента в y представляет спецификатор произвольной строки, и каждый символ в y, который не является ни символом подчеркивания, ни символом знака процента, представляет сам этот символ.


  • Строка y является последовательностью минимального числа спецификаторов подстрок таких, что каждый <символ> (<character>) y является частью в точности одного спецификатора подстроки. Спецификатор подстроки - это спецификатор произвольного символа, спецификатор произвольной подстроки или любая последовательность <символов> (<character>), не являющаяся спецификатором произвольного символа или спецификатором произвольной строки.


  • Результатом "x LIKE y" является unknown, если x или y представляют неопределенное значение. Если x и y представляют не неопределенные значения, то значением "x LIKE y" является либо true, либо false.


  • Результатом "x LIKE y" является true, если существует разбиение x на подстроки такое, что:

    a) Подстрока x является последовательностью нуля или более подряд идущих <символов> (<character>) x, и каждый <символ> (<character>) x есть часть в точности одной подстроки.

    b) Если i-ый спецификатор подстроки y является спецификатором произвольного символа, i-ая подстрока x состоит из одного произвольного <символа> (<character>).

    c) Если i-ый спецификатор подстроки y является спецификатором произвольной строки, i-ая подстрока x является произвольной последовательностью нуля или более <символов> (<character>).

    d) Если i-ый спецификатор подстроки y не является ни спецификатором произвольного символа, ни спецификатором произвольной строки, i-ая подстрока x совпадает с этим спецификатором подстроки и имеет ту же длину, что этот спецификатор подстроки.

    e) Число подстрок x равно числу спецификаторов подстрок y.


  • Результат "x NOT LIKE y" такой же, как результат "NOT (x LIKE y)".



  • Содержание раздела