Сложная логика в фильтре
Использование запросов
В некоторых полях фильтров (в основном, текстовых или символьных) можно вводить запросы.
Запрос представляет из себя логическое выражение. Например, выборка пользователей по полю ФИО пользователя. Если ввести
Пётр & Иванов
то отфильтруются все пользователи, у которых в поле ФИО встречаются оба эти слова, либо полностью, либо частично. Такого же результата можно добиться, написав эти слова через пробел: Пётр Иванов
.
Если нужно отфильтровать всех пользователей, у которых в поле ФИО встречается Пётр или Иванов, необходимо ввести запрос:
Пётр | Иванов
Когда необходимо использовать отрицание, предусмотрен логический оператор "~". Например:
(Пётр | Иванов) & ~Сидоров.
Данный запрос означает: вывести всех пользователей, у которых в поле ФИО встречаются сочетания букв Пётр или Иванов и в то же время не встречаются Сидоров.
В последнем запросе были использованы круглые скобки. Это обусловлено тем, что оператор "|" имеет более низкий приоритет, чем оператор "&" (см. таблицу Приоритеты логических операторов). В противном случае, если бы мы не указали круглых скобок, запрос Пётр | Иванов & ~Сидоров
имел бы следующее значение: вывести всех пользователей, у которых в поле ФИО встречаются сочетания букв Иванов и не встречаются Сидоров, либо всех пользователей, у которых в поле ФИО встречается Пётр.
Вы можете использовать скобки и для построения более сложных запросов.
Помимо вышеописанных операторов, возможно использование операторов для задания масок. Например, вы не помните ФИО нужного вам человека, но точно знаете что фамилия начинается на "Пе" и заканчивается на "ова", при этом имя этого человека "Ирина" либо "Ирэна". Для описания данных условий необходимо использовать следующий запрос: Пе%ова & Ир_на
. В данном запросе были использованы два оператора: "%", означающий "ноль, либо более любых символов" и оператор "_", означающий "один любой символ".
В случае, если вам необходимо использовать поиск слов, содержащих зарезервированные символы, воспользуйтесь двойными либо одинарными кавычками, например: "~NICK~" | '&Leon&'
. Если вам необходимо найти фразу содержащую пробелы, выделите ее двойными либо одинарными кавычками, например: "Microsoft Internet Explorer" | 'Netscape Navigator'
.
Во всех выражениях запроса регистр символов значения не имеет.
Операторы, используемые в запросах
Оператор | Описание |
---|---|
& | Логический оператор "и" можно опускать: запрос Пётр & Иванов полностью эквивалентен запросу Пётр Иванов. |
| | Логический оператор "или" позволяет искать записи, содержащие хотя бы один из операндов. |
~ | Логический оператор "не" позволяет искать записи, не содержащие слово, указанное сразу после оператора, либо означает отрицание выражения, следующего сразу за этим оператором. |
( ) | Круглые скобки задают порядок действия логических операторов. |
% | Оператор задания маски. Означает "0 или более любых символов". |
_ | Оператор задания маски. Означает "1 любой символ". |
Приоритеты логических операторов
Оператор | Приоритет |
---|---|
~ | 1 |
& | 2 |
| | 3 |