FirebirdSQL logo

STARTING WITH

Доступно в

DSQL, PSQL, ESQL.

Синтаксис
<value> [NOT] STARTING WITH <start-value>

Предикат STARTING WITH ищет строку, которая начинается с символов в его аргументе start-value.Чувствительность к регистру и ударению в STARTING WITH зависит от сортировки (COLLATION) первого аргумента value.

При использовании предиката STARTING WITH в поисковых условиях DML запросов, оптимизатор Firebird может использовать индекс по искомому столбцу, если он определён.

Example 1. Использование предиката STARTING WITH

Поиск сотрудников, фамилия которых начинается с “Jo”.

SELECT LAST_NAME, FIRST_NAME
FROM EMPLOYEE
WHERE LAST_NAME STARTING WITH 'Jo'
См. также:

LIKE.

CONTAINING

Доступно в

DSQL, PSQL, ESQL.

Синтаксис
<value> [NOT] CONTAINING <substring>

Оператор CONTAINING ищет строку или тип, подобный строке, отыскивая последовательность символов, которая соответствует его аргументу.Он может быть использован для алфавитно-цифрового (подобного строковому) поиска в числах и датах.Поиск CONTAINING не чувствителен к регистру.Тем не менее, если используется сортировка чувствительная к акцентам, то поиск будет чувствителен к акцентам.

При использовании оператора CONTAINING во внимание принимаются все символы строки.Это касается так же начальных и конечных пробелов.Если операция сравнения в запросе должна вернуть все строки, содержащие строки CONTAINING 'абв ' (с символом пробела на конце), то строка, содержащая 'абв' (без пробела), не будет возвращена.

При использовании предиката CONTAINING в поисковых условиях DML запросов, оптимизатор Firebird не может использовать индекс по искомому столбцу.

Example 1. Поиск подстроки с использованием предиката CONTAINING

Поиск проектов в именах, которых присутствует подстрока “Map”:

SELECT *
FROM PROJECT
WHERE PROJ_NAME CONTAINING 'map';

В данном случае будет возвращены две строки с именами “AutoMap” и “MapBrowser port”.

Example 2. Поиск внутри даты с использованием предиката CONTAINING

Поиск записей об изменении зарплат с датой содержащей число 84 (в данном случае изменения, которые произошли в 1984 году):

SELECT *
FROM SALARY_HISTORY
WHERE CHANGE_DATE CONTAINING 84;
См. также:

LIKE.

SIMILAR TO

Доступно в

DSQL, PSQL.

Синтаксис
string-expression [NOT] SIMILAR TO <pattern> [ESCAPE <escape-char>]

<pattern> ::= регулярное выражение SQL
<escape-char> ::= символ экранирования

Оператор SIMILAR TO проверяет соответствие строки с шаблоном регулярного выражения SQL.В отличие от некоторых других языков для успешного выполнения шаблон должен соответствовать всей строке — соответствие подстроки недостаточно.Если один из операндов имеет значение NULL, то и результат будет NULL.В противном случае результат является TRUE или FALSE.

Синтаксис регулярных выражений SQL

Следующий синтаксис определяет формат регулярного выражения SQL.Это полное и корректное его определение.Он является весьма формальным и довольно длинным и, вероятно, озадачивает тех, кто не имеет опыта работы с регулярными выражениями.Не стесняйтесь пропустить его и начать читать следующий раздел, Создание регулярных выражений, использующий подход от простого к сложному.

<regular expression> ::= <regular term> ['|' <regular term> ...]

<regular term> ::= <regular factor> ...

<regular factor> ::= <regular primary> [<quantifier>]

<quantifier> ::= ? | * | + | '{' <m> [,[<n>]] '}'

<m>, <n> ::= целые положительные числа, если присутвуют оба числа, то <m> <= <n>

<regular primary> ::=
    <character> | <character class> | %
  | (<regular expression>)

<character> ::= <escaped character> | <non-escaped character>

<escaped character> ::=
  <escape-char> <special character> | <escape-char> <escape-char>

<special character> ::= любой из символов []()|^-+*%_?{}

<non-escaped character> ::=
  любой символ за исключением <special character>
  и не эквивалентный <escape-char> (если задан)

<character class> ::=
    '_' | '[' <member> ... ']' | '[^' <non-member> ... ']'
  | '[' <member> ... '^' <non-member> ... ']'

<member>, <non-member> ::= <character> | <range> | <predefined class>

<range> ::= <character>-<character>

<predefined class> ::= '[:' <predefined class name> ':]'

<predefined class name> ::=
  ALPHA | UPPER | LOWER | DIGIT | ALNUM | SPACE | WHITESPACE