Совпадение по шаблону в условиях поиска
Ключевое слово LIKE осуществляет поиск соответствия для символьной строки, а также значений даты или времени по заданному шаблону. Дополнительные сведения см. в разделе Типы данных (Transact-SQL). Для ключевого слова LIKE указывается регулярное выражение, содержащее шаблон, на соответствие которому проверяются значения. Шаблон представляет собой символьную строку — объект поиска, — которая может включать в себя любые комбинации из четырех символов-шаблонов.
Символ-шаблон | Значение |
---|---|
% |
Любая строка из нуля или более символов. |
_ |
Любой единичный символ. |
[ ] |
Любой символ из указанного диапазона (например [a-f]) или набора символов (например [abcdef]). |
[^] |
Любой символ, не входящий в заданный диапазон (например [^a-f]) или набор символов (например [^abcdef]). |
Символы-шаблоны и символьная строка заключаются в одинарные кавычки, как показано в следующих примерах.
- LIKE 'Mc%' осуществляет поиск всех строк, начинающихся с букв «Mc» (например «McBadden»).
- LIKE '%inger' осуществляет поиск всех строк, заканчивающихся буквами «inger» (например «Ringer», «Stringer»).
- LIKE '%en%' осуществляет поиск всех строк, которые содержат сочетание «en» в любом месте строки (например «Bennet», «Green», «McBadden»).
- LIKE '_heryl' осуществляет поиск всех имен, состоящих из шести букв и заканчивающихся на «heryl» (например «Cheryl», «Sheryl»).
- LIKE '[CK]ars[eo]n' осуществляет поиск вхождений «Carsen», «Karsen», «Carson» и «Karson» (например «Carson»).
- LIKE '[M-Z]inger' осуществляет поиск всех имен, заканчивающихся на «inger» и начинающихся на любую букву из диапазона от M до Z (например «Ringer»).
- LIKE 'M[^c]%' осуществляет поиск всех имен, которые начинаются на букву «М» и не содержат во второй позиции символа «с» (например «MacFeather»).
Следующий запрос найдет в таблице Contact
все телефонные номера с кодом города 415
:
SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE Phone LIKE '415%'
Предложение NOT LIKE
может использоваться с теми же символами-шаблонами. Чтобы найти в таблице Contact
все телефонные номера с кодом города, отличным от 415
, можно выполнить один из следующих запросов:
SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE Phone NOT LIKE '415%'
-- Or
SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE NOT Phone LIKE '415%'
Предложение IS NOT NULL
можно использовать с шаблонами и предложением LIKE
. Например, следующий запрос получает из таблицы Contact
телефонные номера, которые начинаются на 415
и IS NOT NULL
:
USE AdventureWorks;
GO
SELECT Phone
FROM Person.Contact
WHERE Phone LIKE '415%' and Phone IS NOT NULL
Важно! |
---|
Результат, возвращаемый инструкциями, включающими ключевое слово LIKE, зависит от порядка сортировки, выбранного во время установки. Дополнительные сведения о том, как влияют на результат различные порядки сортировки, см. в разделе Работа с параметрами сортировки. |
Единственными условиями WHERE, которые можно использовать для столбцов типа text, являются LIKE, IS NULL или PATINDEX.
Символы-шаблоны, указанные без ключевого слова LIKE, рассматриваются как константы, а не шаблоны, и представляют только свое собственное значение. В следующем примере производится поиск только тех телефонных номеров, которые состоят из четырех символов 415%
. Номера, начинающиеся с 415
, найдены не будут. Дополнительные сведения о константах см. в разделе Константы (компонент Database Engine).
SELECT Phone
FROM AdventureWorks.Person.Contact
WHERE Phone = '415%'
Другим важным аспектом использования символов-шаблонов является их влияние на производительность. Если символ-шаблон находится в начале выражения, становится невозможным использование индекса (вы бы тоже не знали, с какой страницы начать поиск в телефонной книге по фамилии «%mith», а не «Smith»). Если символ-шаблон находится в середине или конце выражения, это не влияет на использование индекса (то есть известно, с чего начать поиск в телефонной книге по фамилии «Samuel%», даже если в ней также присутствуют «Samuels» и «Samuelson»).
Поиск символов-шаблонов
Поиск может производиться и для символов-шаблонов. Существуют два следующих способа указать символ, который обычно используется в качестве шаблона.
Использовать ключевое слово ESCAPE для задания экранирующего символа. Если экранирующий символ находится перед символом-шаблоном, последний знак рассматривается как обычный символ. Например, чтобы найти где-либо в строке вхождение
5%
, воспользуйтесь следующим предложением:WHERE ColumnA LIKE '%5/%%' ESCAPE '/'
В этом предложении
LIKE
начальный и конечный символы процента (%
) интерпретируются как символы-шаблоны, а символ процента, перед которым указана косая черта (/
), интерпретируется как обычный символ «%».Заключить символ-шаблон в квадратные скобки (
[ ]
). Чтобы найти дефис (-
), не используя его для задания диапазона, укажите его первым символом внутри квадратных скобок:WHERE ColumnA LIKE '9[-]5'
В следующей таблице показано использование квадратных скобок с символами-шаблонами.
Символ Значение LIKE '5[%]'
5%
LIKE '5%'
Цифра «5», за которой следует строка из нуля или более символов
LIKE '[_]n'
_n
LIKE '_n'
Слова «an», «in», «on» (и так далее)
LIKE '[a-cdf]'
a, b, c, d или f
LIKE '[-acdf]'
-, a, b, c, d или f
LIKE '[ [ ]'
[
LIKE ']'
]
При сравнении строк оператором LIKE учитываются все символы строки-шаблона, в том числе все начальные и завершающие пробелы. Если запрос производит поиск строк с ключевым словом LIKE 'abc ' (содержащих символы «abc», за которыми следует один пробел), то строка, в которой столбец содержит символы «abc» (без пробела), возвращен не будет. Но не наоборот: завершающие пробелы в выражении, с которым сравнивается шаблон, не учитываются. Если запрос должен вернуть строки LIKE 'abc' (содержащие символы «abc» без пробела), то будут возвращены все строки, значения в которых начинаются с букв «abc», за которыми могут следовать один, ни одного или несколько пробелов.
См. также
Другие ресурсы
LIKE (Transact-SQL)
Предложение WHERE (Transact-SQL)
% (символы-шаблоны — символы для совпадения) (Transact-SQL)
[ ] (Шаблон — символ(ы) для сопоставления) (Transact-SQL)
[^] (Несопоставленные символы-шаблоны) (Transact-SQL)
_ (шаблон — совпадение одного символа) (Transact-SQL)
PATINDEX (Transact-SQL)