Поделиться через


LIKE (Entity SQL)

Определяет, соответствует ли аргумент типа String заданному шаблону.

Синтаксис

match [NOT] LIKE pattern [ESCAPE escape]

Аргументы

match Выражение Entity SQL, которое вычисляет значение String.

pattern Шаблон, соответствующий указанному String.

escape Escape-символ.

NOT Указывает, что результат LIKE может быть отрицаем.

Возвращаемое значение

Равно true, если string соответствует шаблону, в противном случае равно false.

Замечания

Выражения Entity SQL, использующие оператор LIKE, оцениваются так же, как выражения, использующие равенство в качестве критерия фильтра. Однако выражения Entity SQL, использующие оператор LIKE, могут включать как литералы, так и дикие карта символы.

В следующей таблице описан синтаксис шаблона string.

Символ-шаблон Description Пример
% Любое значение string длиной от нуля и более символов. title like '%computer%' находит все названия с словом "computer" в любом месте заголовка.
_ (символ подчеркивания) Любой одиночный символ. firstname like '_ean' находит все четыре буквы первых имен, которые заканчиваются "ean", например Дин или Шон.
[ ] Любой отдельный символ в диапазоне ([a-f]) или наборе ([abcdef]). lastname like '[C-P]arsen' находит фамилии, заканчивающиеся "arsen" и начиная с любого одного символа между C и P, например Карсен или Ларсен.
[^] Любой символ, содержащийся в диапазоне ([^a-f]) или наборе ([^abcdef]). lastname like 'de[^l]%' находит все фамилии, начинающиеся с "de", и не включают "l" в качестве следующей буквы.

Примечание.

Оператор Entity SQL LIKE и предложение ESCAPE нельзя применить к System.DateTime или System.Guid значениям.

Оператор LIKE поддерживает шаблоны в ASCII и Юникоде. Если все параметры имеют символьный тип ASCII, то применяется шаблон ASCII. Если один или несколько аргументов представлен в Юникоде, то выполняется преобразование всех аргументов в Юникод, а затем применяется шаблон в Юникоде. Завершающие пробелы учитываются только при работе оператора LIKE с данными в Юникоде. Для других типов данных завершающие пробелы не учитываются. Синтаксис строки шаблона Entity SQL совпадает с синтаксисом строки Transact-SQL.

Шаблон может включать обычные символы и символы-шаблоны. Во время сравнения с шаблоном обычные символы должны в точности совпадать с символами, присутствующими в string. Символы-шаблоны могут совпадать с произвольными элементами символьной строки. При использовании символов-шаблонов оператор LIKE более гибок, нежели операторы сравнения строки = и !=.

Примечание.

Для работы с конкретным поставщиком могут использоваться расширения, специфические для поставщика. Однако такие конструкции другими поставщиками могут обрабатываться иначе. Например, SqlServer поддерживает шаблоны [первый-последний] и [^первый-последний], в которых первый сопоставляет ровно один символ между первым и последним, а последний - ровно один символ, который не находится между первым и последним.

ESCAPE

Предложение ESCAPE позволяет искать символьные строки, в состав которых входит один или более специальных символов-шаблонов, описанных в таблице в прошлом разделе. Предположим, нужно найти все документы, содержащие в заголовке литерал «100%». Так как процент (%) является диким карта символом, его необходимо экранировать с помощью предложения Entity SQL ESCAPE для успешного выполнения поиска. Ниже приведен пример этого фильтра.

"title like '%100!%%' escape '!'"

В этом выражении поиска символ-шаблон процента (%), немедленно следующий за символом восклицательного знака (!), рассматривается как литерал, а не как символ-шаблон. Вы можете использовать любой символ в качестве escape-символа, за исключением дикого символа Entity SQL карта символов и квадратных скобок ([ ]) символов. В прошлом примере символ восклицательного знака (!) используется как escape-символ.

Пример

Следующие два запроса Entity SQL используют операторы LIKE и ESCAPE, чтобы определить, соответствует ли определенная символьная строка указанному шаблону. Первый запрос выполняет поиск Name символов, начинающихся с символов Down_. В этом запросе используется параметр ESCAPE, так как символ подчеркивания (_) является символом-шаблоном. Без указания параметра ESCAPE запрос будет выполнять поиск любых значений Name, начинающихся со слова Down, за которым следует любой единичный символ, отличный от символа подчеркивания. Запросы основаны на модели AdventureWorks Sales. Для компиляции и запуска этого запроса выполните следующие шаги.

  1. Выполните процедуру, описанную в разделе "Практическое руководство. Выполнение запроса, возвращающего результаты PrimitiveType".

  2. Передайте следующий запрос в качестве аргумента методу ExecutePrimitiveTypeQuery :

-- LIKE and ESCAPE
-- If an AdventureWorksEntities.Products contained a Name 
-- with the value 'Down_Tube', the following query would find that 
-- value.
Select value P.Name FROM AdventureWorksEntities.Products AS P 
WHERE P.Name LIKE 'DownA_%' ESCAPE 'A'

-- LIKE
Select value P.Name FROM AdventureWorksEntities.Products AS P 
WHERE P.Name LIKE 'BB%'

См. также