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. Для компиляции и запуска этого запроса выполните следующие шаги.
Выполните процедуру, описанную в разделе "Практическое руководство. Выполнение запроса, возвращающего результаты PrimitiveType".
Передайте следующий запрос в качестве аргумента методу
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%'