FirebirdSQL logo

BETWEEN

Доступно в

DSQL, PSQL, ESQL.

Синтаксис
<value> [NOT] BETWEEN <value_1> AND <value_2>

Предикат BETWEEN проверяет, попадает (или не попадает при использовании NOT) ли значение во включающий диапазон значений.

Операнды для предиката BETWEEN — это два аргумента совместимых типов.В отличие от некоторых других СУБД в Firebird предикат BETWEEN не является симметричным.Меньшее значение должно быть первым аргументом, иначе предикат BETWEEN всегда будет ложным.Поиск является включающим.Таким образом, предикат BETWEEN можно переписать следующим образом:

<value> >= <value_1> AND <value> <= <value_2>

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

Example 1. Использование предиката BETWEEN
SELECT *
FROM EMPLOYEE
WHERE HIRE_DATE BETWEEN date '01.01.1992' AND CURRENT_DATE

LIKE

Доступно в

DSQL, PSQL, ESQL.

Синтаксис
<match value> [NOT] LIKE <pattern>
  [ESCAPE <escape character>]

<match value> ::= выражение символьного типа
<pattern> ::= шаблон поиска
<escape character> ::= символ экранирования

Предикат LIKE сравнивает выражение символьного типа с шаблоном, определённым во втором выражении.Чувствительность к регистру или диакритическим знакам при сравнении определяется используемым параметром сортировки (COLLATION).

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

Трафаретные символы

В шаблоне, разрешается использование двух трафаретных символов:

  • символ процента (%) заменяет последовательность любых символов (число символов в последовательности может быть от 0 и более) в проверяемом значении;

  • символ подчёркивания (_), который можно применять вместо любого единичного символа в проверяемом значении.

Если проверяемое значение соответствует образцу с учётом трафаретных символов, то предикат истинен.

Использование управляющего символа в предложении ESCAPE

Если искомая строка содержит трафаретный символ, то следует задать управляющий символ в предложении ESCAPE.Этот управляющий символ должен использоваться в образце перед трафаретным символом, сообщая о том, что последний следует трактовать как обычный символ.

Примеры использования предиката LIKE
Example 1. Поиск строк начинающихся с заданной подстроки с использованеим предиката LIKE

Поиск номеров отделов, названия которых начинаются со слова “Software”

SELECT DEPT_NO
FROM DEPT
WHERE DEPT_NAME LIKE 'Software%';

В данном запросе может быть использован индекс, если он построен на поле DEPT_NAME.

Note
Оптимизация LIKE

В общем случае предикат LIKE не использует индекс.Однако если предикат принимает вид LIKE 'string%', то он будет преобразован в предикат STARTING WITH, который будет использовать индекс.Если вам необходимо выполнить поиск с начала строки, то вместо предиката LIKE рекомендуется использовать предикат STARTING WITH.

Example 2. Использование трафаретного символа “_” в предикате LIKE

Поиск сотрудников, имена которых состоят из 5 букв, начинающихся с букв “Sm” и заканчивающихся на “th”.В данном случае предикат будет истинен для имен “Smith” и “Smyth”.

SELECT
    first_name
FROM
    employee
WHERE first_name LIKE 'Sm_th'
Example 3. Поиск внутри строки с использованием предиката LIKE

Поиск всех заказчиков, в адресе которых содержится строка “Ростов”.

SELECT *
FROM CUSTOMER
WHERE ADDRESS LIKE '%Ростов%'
Tip

Если вам необходимо выполнить поиск внутри строки, то вместо предиката LIKE рекомендуется использовать предикат CONTAINING.

Example 4. Использование управляющего символа в предложении ESCAPE с предикатом `LIKE

Поиск таблиц, содержащих в имени знак подчёркивания.В данном случае в качестве управляющего символа задан символ “#”.

SELECT
  RDB$RELATION_NAME
FROM RDB$RELATIONS
WHERE RDB$RELATION_NAME LIKE '%#_%' ESCAPE '#'
См. также:

STARTING WITH, CONTAINING, SIMILAR TO.