Использование оператора LIKE с коллекциями в SOQL

Одним из самых часто используемых инструментов Apex является SOQL запрос. Многие согласятся, что было бы полезно иметь под рукой краткую “шпаргалку” по особенностям использования SOQL. Думаю, с базовым синтаксисом SOQL запросов знакомы все, поэтому остановлюсь на некоторых особенностях – совместном использовании операторов LIKE и IN в SOQL запросах.

Мы используем оператор LIKE для того, чтобы найти записи, одно из текстовых полей которых содержит определенную строку, например:

List<Account> accountList = [SELECT Id FROM Account WHERE Name LIKE ‘%ABC%’];

Данный запрос найдет все Account-ы, у которых в поле Name есть строка ABC.

Оператор IN мы используем, чтобы найти записи, одно из полей которых содержит значение, находящееся в List или Set, например:

Set<String> setAccountNames = new Set<String>{'ABC', 'XYZ', 'RST'};
List<Account> accountList = [SELECT Id FROM Account WHERE Name IN :setAccoountNames];

Данный запрос найдет все Account-ы, у которых поле Name равно ABC, XYZ или RST.

Теперь совместим функциональность LIKE и IN. Допустим, я хочу найти все Account-ы, у которых поле Name содержит строки ABC, XYZ или RST. Для этого мы создаем

Set<String> setAccountNames = new Set<String>{'%ABC%', '%XYZ%', '%RST%'};

и делаем запрос

List<Account> accountList = [SELECT Id FROM Account WHERE Name LIKE :setAccountNames];

Данный запрос найдет все Account-ы, у которых поле Name содержит ABC, XYZ или RST.

5 Likes