Одним из самых часто используемых инструментов 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.