1. Главная страница » Компьютеры

Ms sql server like

Автор: | 16.12.2019

APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse

Determines whether a specific character string matches a specified pattern. A pattern can include regular characters and wildcard characters. During pattern matching, regular characters must exactly match the characters specified in the character string. However, wildcard characters can be matched with arbitrary fragments of the character string. Using wildcard characters makes the LIKE operator more flexible than using the = and != string comparison operators. If any one of the arguments isn’t of character string data type, the SQL Server Database Engine converts it to character string data type, if it’s possible.

Transact-SQL Syntax Conventions

Syntax

Arguments

match_expression
Is any valid expression of character data type.

pattern
Is the specific string of characters to search for in match_expression, and can include the following valid wildcard characters. pattern can be a maximum of 8,000 bytes.

Читайте также:  Asus nvidia geforce gtx 770
Wildcard character Description Example
% Any string of zero or more characters. WHERE title LIKE ‘%computer%’ finds all book titles with the word ‘computer’ anywhere in the book title.
_ (underscore) Any single character. WHERE au_fname LIKE ‘_ean’ finds all four-letter first names that end with ean (Dean, Sean, and so on).
[ ] Any single character within the specified range ([a-f]) or set ([abcdef]). WHERE au_lname LIKE ‘[C-P]arsen’ finds author last names ending with arsen and starting with any single character between C and P, for example Carsen, Larsen, Karsen, and so on. In range searches, the characters included in the range may vary depending on the sorting rules of the collation.
[^] Any single character not within the specified range ([^a-f]) or set ([^abcdef]). WHERE au_lname LIKE ‘de[^l]%’ all author last names starting with de and where the following letter isn’t l.

escape_character
Is a character put in front of a wildcard character to indicate that the wildcard is interpreted as a regular character and not as a wildcard. escape_character is a character expression that has no default and must evaluate to only one character.

Result Types

Boolean

Result Value

LIKE returns TRUE if the match_expression matches the specified pattern.

Remarks

When you do string comparisons by using LIKE, all characters in the pattern string are significant. Significant characters include any leading or trailing spaces. If a comparison in a query is to return all rows with a string LIKE ‘abc ‘ (abc followed by a single space), a row in which the value of that column is abc (abc without a space) isn’t returned. However, trailing blanks, in the expression to which the pattern is matched, are ignored. If a comparison in a query is to return all rows with the string LIKE ‘abc’ (abc without a space), all rows that start with abc and have zero or more trailing blanks are returned.

A string comparison using a pattern that contains char and varchar data may not pass a LIKE comparison because of how the data is stored for each data type. The following example passes a local char variable to a stored procedure and then uses pattern matching to find all employees whose last names start with the specified set of characters.

In the FindEmployee procedure, no rows are returned because the char variable ( @EmpLName ) contains trailing blanks whenever the name contains fewer than 20 characters. Because the LastName column is varchar, there are no trailing blanks. This procedure fails because the trailing blanks are significant.

However, the following example succeeds because trailing blanks aren’t added to a varchar variable.

Here is the result set.

Pattern Matching by Using LIKE

LIKE supports ASCII pattern matching and Unicode pattern matching. When all arguments (match_expression, pattern, and escape_character, if present) are ASCII character data types, ASCII pattern matching is performed. If any one of the arguments are of Unicode data type, all arguments are converted to Unicode and Unicode pattern matching is performed. When you use Unicode data (nchar or nvarchar data types) with LIKE, trailing blanks are significant; however, for non-Unicode data, trailing blanks aren’t significant. Unicode LIKE is compatible with the ISO standard. ASCII LIKE is compatible with earlier versions of SQL Server.

The following is a series of examples that show the differences in rows returned between ASCII and Unicode LIKE pattern matching.

LIKE comparisons are affected by collation. For more information, see COLLATE (Transact-SQL).

Using the % Wildcard Character

If the LIKE ‘5%’ symbol is specified, the Database Engine searches for the number 5 followed by any string of zero or more characters.

For example, the following query shows all dynamic management views in the AdventureWorks2012 database, because they all start with the letters dm .

To see all objects that aren’t dynamic management views, use NOT LIKE ‘dm%’ . If you have a total of 32 objects and LIKE finds 13 names that match the pattern, NOT LIKE finds the 19 objects that don’t match the LIKE pattern.

You may not always find the same names with a pattern such as LIKE ‘[^d][^m]%’ . Instead of 19 names, you may find only 14, with all the names that start with d or have m as the second letter eliminated from the results, and the dynamic management view names. This behavior is because match strings with negative wildcard characters are evaluated in steps, one wildcard at a time. If the match fails at any point in the evaluation, it’s eliminated.

Using Wildcard Characters As Literals

You can use the wildcard pattern matching characters as literal characters. To use a wildcard character as a literal character, enclose the wildcard character in brackets. The following table shows several examples of using the LIKE keyword and the [ ] wildcard characters.

Symbol Meaning
LIKE ‘5[%]’ 5%
LIKE ‘[_]n’ _n
LIKE ‘[a-cdf]’ a, b, c, d, or f
LIKE ‘[-acdf]’ -, a, c, d, or f
LIKE ‘[ [ ]’ [
LIKE ‘]’ ]
LIKE ‘abc[_]d%’ abc_d and abc_de
LIKE ‘abc[def]’ abcd, abce, and abcf

Pattern Matching with the ESCAPE Clause

You can search for character strings that include one or more of the special wildcard characters. For example, the discounts table in a customers database may store discount values that include a percent sign (%). To search for the percent sign as a character instead of as a wildcard character, the ESCAPE keyword and escape character must be provided. For example, a sample database contains a column named comment that contains the text 30%. To search for any rows that contain the string 30% anywhere in the comment column, specify a WHERE clause such as WHERE comment LIKE ‘%30!%%’ ESCAPE ‘!’ . If ESCAPE and the escape character aren’t specified, the Database Engine returns any rows with the string 30!.

If there is no character after an escape character in the LIKE pattern, the pattern isn’t valid and the LIKE returns FALSE. If the character after an escape character isn’t a wildcard character, the escape character is discarded and the following character is treated as a regular character in the pattern. These characters include the percent sign (%), underscore (_), and left bracket ([) wildcard characters when they are enclosed in double brackets ([ ]). Escape characters can be used within the double bracket characters ([ ]), including to escape a caret (^), hyphen (-), or right bracket (]).

0x0000 (char(0)) is an undefined character in Windows collations and can’t be included in LIKE.

Examples

A. Using LIKE with the % wildcard character

The following example finds all telephone numbers that have area code 415 in the PersonPhone table.

Here is the result set.

Here is the result set.

D. Using the [ ] wildcard characters

The following example finds employees on the Person table with the first name of Cheryl or Sheryl .

The following example finds the rows for employees in the Person table with last names of Zheng or Zhang .

Examples: Azure Synapse Analytics (SQL DW) and Parallel Data Warehouse

E. Using LIKE with the % wildcard character

The following example finds all employees in the DimEmployee table with telephone numbers that start with 612 .

F. Using NOT LIKE with the % wildcard character

The following example finds all telephone numbers in the DimEmployee table that don’t start with 612 . .

G. Using LIKE with the _ wildcard character

The following example finds all telephone numbers that have an area code starting with 6 and ending in 2 in the DimEmployee table. The % wildcard character is included at the end of the search pattern to match all following characters in the phone column value.

Оператор LIKE используется в предложении WHERE для поиска заданного шаблона в столбце.

В сочетании с оператором LIKE используются два подстановочных знака:

  • % — Знак процента представляет нулевой, один или несколько символов
  • _ — Подчеркнутый символ представляет собой один символ
Выражение Описание
WHERE name LIKE ‘text%’ Находит любые значения, начинающиеся с "text"
WHERE name LIKE ‘%text’ Находит любые значения, заканчивающиеся на "text"
WHERE name LIKE ‘%text%’ Находит любые значения, которые имеют «text» в любой позиции
WHERE name LIKE ‘_text%’ Находит любые значения, которые имеют «text» во второй позиции
WHERE name LIKE ‘text_%_%’ Находит любые значения, начинающиеся с «text» и длиной не менее 3 символов
WHERE name LIKE ‘text%data’ Находит любые значения, начинающиеся с «text» и заканчивающиеся на «data»

Примеры SQL LIKE

Следующий оператор SQL выбирает всех пользователей с именем name, начинающимся с «Т»:

Пример:

Следующий оператор SQL выбирает всех пользователей с именем name, заканчивающимся на «м»:

Пример:

Следующий оператор SQL выбирает всех пользователем с именем name, которое имеет «text» в любой позиции:

Пример:

Следующий оператор SQL выбирает всех пользователей с именем name, которое имеет «text» во второй позиции:

Пример:

Следующий оператор SQL выбирает всех пользователей с именем name, начинающимся с «Т» и длиной не менее 3 символов:

Пример:

Следующий оператор SQL выбирает всех пользователей с именем name, которое начинается с «Т» и заканчивается на «м»:

Пример:

Следующий оператор SQL выбирает всех пользователей с именем name, которое НЕ начинается с «Т»:

ПРИМЕНЯЕТСЯ К: SQL Server (начиная с 2008) База данных SQL Azure Хранилище данных SQL Azure Parallel Data Warehouse

Определяет, совпадает ли указанная символьная строка с заданным шаблоном. Шаблон может включать обычные символы и символы-шаблоны. Во время сравнения с шаблоном необходимо, чтобы его обычные символы в точности совпадали с символами, указанными в строке. Символы-шаблоны могут совпадать с произвольными элементами символьной строки. Использование символов-шаблонов в отличие от использования операторов сравнения строки (= и !=) делает оператор LIKE более гибким. Если тип данных одного из аргументов не является символьной строкой, компонент Компонент SQL Server Database Engine, если это возможно, преобразует его в тип данных символьной строки.

Синтаксические обозначения в Transact-SQL

match_expression
Любое допустимое выражение символьного типа данных.

шаблон
Конкретная строка символов для поиска в match_expressionи могут включать следующие допустимые символы-шаблоны. шаблон не может превышать 8 000 байт.

Символ-шаблон Description Пример
% Любая строка, содержащая ноль или более символов. Инструкция WHERE Название LIKE ‘%компьютер%’ выполняет поиск и выдает все названия книг, содержащие слово «компьютер».
_ (подчеркивание) Любой одиночный символ. Инструкция WHERE фамилияавтора LIKE ‘етров’ выполняет поиск и выдает все имена, состоящие из шести букв и заканчивающиеся сочетанием «етров» (Петров, Ветров и т.п.).
[ ] Любой одиночный символ, содержащийся в диапазоне ([a-f]) или наборе ([abcdef]). Инструкция WHERE Фамилия_автора LIKE ‘[Л-С]омов’ выполняет поиск и выдает все фамилии авторов, заканчивающиеся на «омов» и начинающиеся на любую букву в промежутке от «Л» до «С», например Ломов, Ромов, Сомов и т.п. При выполнении операции поиска в диапазоне символы, включенные в диапазон, могут изменяться в зависимости от правил сортировки параметров сортировки.
[^] Любой одиночный символ, не содержащийся в диапазоне ([^a-f]) или наборе ([^abcdef]). Инструкция WHERE Фамилия_автора LIKE ‘ив[^а]%’ выполняет поиск и выдает все фамилии, начинающиеся на «ив», в которых третья буква отличается от «а».

escape_character
Символ, помещаемый перед символом-шаблоном, чтобы символ-шаблон рассматривался как обычный символ, а не как шаблон. escape_character символьное выражение, нет значения по умолчанию и возвращающим результат в виде одного символа.

Логическое значение

КАК и возвращает TRUE, если match_expression соответствует указанному шаблон.

При использовании оператора LIKE для сравнения строк во внимание принимаются все символы строки-шаблона. Это касается начальных и конечных пробелов (« »). Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв ‘ (с символом пробела на конце), то строка, содержащая «абв» (без пробела), не будет возвращена. Однако завершающие пробелы в выражении, с которым сравнивается шаблон, не учитываются. Если операция сравнения в запросе должна вернуть все строки, содержащие строки LIKE ‘абв’ (без знака пробела на конце), то будут возвращены все строки, содержащие «абв», как с завершающими пробелами, так и без них.

Сравнение строк, используя шаблон, который содержит char и varchar данных не может передать из-за хранение данных использования оператора LIKE. Необходимо знать методы хранения каждого типа данных, чтобы избежать некорректного использования оператора LIKE. В следующем примере передается локальной char переменной в хранимую процедуру и использует шаблоны для поиска всех сотрудников, чьи фамилии начинаются с указанного набора символов.

В FindEmployee процедура, строки не возвращаются, так как char переменной ( @EmpLName ) содержит конечные пробелы, всякий раз, когда имя содержит не более 20 символов. Поскольку LastName столбец varchar, существуют без пробелов. Данная процедура завершается неудачей, так как завершающие пробелы учитываются.

Однако следующий пример завершается успешно, поскольку конечные пробелы, не добавляются в varchar переменной.

Ниже приводится результирующий набор.

FirstName LastName City

Angela Barbariol Snohomish

David Barber Snohomish

(2 row(s) affected)

Оператор LIKE поддерживает шаблоны в ASCII и Юникоде. Когда все аргументы (match_expression, шаблон, и escape_character, если он имеется) — символьный тип ASCII, шаблон ASCII. В случае, когда какой-либо из аргументов имеет тип данных Юникод, выполняется преобразование всех аргументов в Юникод и применяется шаблон Юникод. При использовании данных в Юникоде (nchar или nvarchar типы данных) с ПОДОБНЫМ учитываются завершающие пробелы; Однако для данных не в Юникоде, завершающие пробелы не учитываются. Работа оператора LIKE с данными в Юникоде совместима со стандартом ISO. Принцип работы оператора LIKE с данными ASCII совместим с более ранними версиями SQL Server.

Приведенные ниже примеры поясняют различия между результатами сравнения данных с шаблонами оператора LIKE, представленными в Юникоде и ASCII.

Операции сравнения с помощью оператора LIKE зависят от параметров сортировки. Дополнительные сведения см. в разделе COLLATE (Transact-SQL) .

Если в операторе LIKE указать символ ‘5%’, то компонент Компонент Database Engine будет искать число «5», за которым следует любая строка с числом символов от нуля и больше.

Например, при выполнении следующего примера отображаются все динамические административные представления базы данных AdventureWorks2012, так как все они начинаются символами dm .

Чтобы отобразить все объекты, не являющиеся динамическими административными представлениями, используется синтаксис NOT LIKE ‘dm%’ . Например, если всего имеется 32 объекта и оператор LIKE выдает 13 наименований, совпадающих с шаблоном, то оператор NOT LIKE возвращает 19 объектов, не соответствующих указанному в операторе LIKE шаблону.

По такому шаблону, как LIKE ‘[^d][^m]%’ , не всегда будут возвращаться одни и те же имена. Вместо 19 имен можно найти только 14, так как имена, которые начинаются с буквы d или у которых второй буквой является m , будут исключены из результата, как и имена динамических административных представлений. Причиной этому является поэтапный поиск отрицательных символов-шаблонов: за один шаг обрабатывается один символ-шаблон. Процесс поиска совпадений прекращается при возникновении сбоя на любой стадии выполнения.

Символы-шаблоны могут быть использованы в качестве литералов. Чтобы использовать символ-шаблон в качестве литерала, его необходимо заключать в скобки. В следующей таблице представлены несколько примеров применения ключевого слова LIKE вместе с символами-шаблонами [ ].

Примечание
Символ Значение
LIKE ‘5[%]’ 5%
LIKE ‘[_]n’ Формат
LIKE ‘[a-cdf]’ a, b, c, d или f
LIKE ‘[-acdf]’ -, a, b, c, d или f
LIKE ‘[ [ ]’ [
LIKE ‘]’ ]
LIKE ‘abc[_]d%’ abc_d и abc_de
LIKE ‘abc[def]’ abcd, abce и abcf

Можно искать символьные строки, в состав которых входит один или более специальных символов-шаблонов. Например, таблица discounts базы данных customers может содержать значения скидок, включающих знак процента (%). Чтобы выполнить поиск знака процента в качестве символа-шаблона, необходимо ввести ключевое слово ESCAPE и escape-символ. Например, образец базы данных содержит столбец с именем comment, в котором хранится значение «30%». Чтобы найти строки, содержащие последовательность символов «30%» в столбце comment, необходимо указать предложение WHERE, например WHERE comment LIKE ‘%30!%%’ ESCAPE ‘!’ . Если предложение ESCAPE и escape-символ не указаны, компонент Компонент Database Engine вернет все строки, содержащие последовательность символов «30».

Если в шаблоне LIKE после escape-символа нет никакого символа, то шаблон является недопустимым и оператор LIKE возвращает значение FALSE. Если символ после escape-символа не является символом-шаблоном, то escape-символ игнорируется, а этот символ рассматривается как обычный символ в шаблоне. Это относится к таким символам-шаблонам, как подчеркивание (_), процент (%) и левая квадратная скобка ([), в том случае, если они заключены в квадратные скобки. Также в квадратных скобках ([ ]) и при использовании escape-символов можно использовать такие символы, как знак вставки (^), дефис (-) и правая квадратная скобка (]).

0x0000 (char(0)) является символ не определен в параметрах сортировки Windows и не могут быть включены в LIKE.

A. Применение оператора LIKE с символом-шаблоном %

В следующем примере в таблице 415 выполняется поиск всех телефонных номеров с кодом города PersonPhone .

Ниже приводится результирующий набор.

FirstName LastName Phone

Ruben Alonso 415-555-124

Shelby Cook 415-555-0121

Karen Hu 415-555-0114

John Long 415-555-0147

David Long 415-555-0123

Gilbert Ma 415-555-0138

Meredith Moreno 415-555-0131

Alexandra Nelson 415-555-0174

Taylor Patterson 415-555-0170

Gabrielle Russell 415-555-0197

Dalton Simmons 415-555-0115

(11 row(s) affected)

Б. Применение оператора NOT LIKE с символом-шаблоном %

В следующем примере в таблице PersonPhone выполняется поиск всех телефонных номеров с региональным кодом, отличным от 415 .

Ниже приводится результирующий набор.

FirstName LastName Phone

Gail Alexander 1 (11) 500 555-0120

Gail Butler 1 (11) 500 555-0191

Gail Erickson 834-555-0132

Gail Erickson 849-555-0139

Gail Griffin 450-555-0171

Gail Moore 155-555-0169

Gail Russell 334-555-0170

Gail Westover 305-555-0100

(8 row(s) affected)

В. Применение предложения ESCAPE

В следующем примере предложение ESCAPE и escape-символ используются для поиска символьной строки 10-15% в столбце c1 таблицы mytbl2 .

Г. Использование символов-шаблонов [ ]

В следующем примере вычисляется сотрудников на Person имя таблицы Cheryl или Sheryl .

В следующем примере выполняется поиск строк в таблице Person для сотрудников с фамилией Zheng или Zhang .

Д. Применение оператора LIKE с символом-шаблоном %

Следующий пример находит все сотрудники DimEmployee таблицу с телефонные номера, начинающиеся с 612 .

Е. Применение оператора NOT LIKE с символом-шаблоном %

Следующий пример находит все телефонные номера в DimEmployee таблицы, которые не начинаются с 612 . .

Ж. Применение оператора LIKE с символом-шаблоном _

Следующий пример находит все телефонные номера с кодом города, начиная с 6 и окончание 2 в DimEmployee таблицы. Обратите внимание, что символом-шаблоном % также включаются в конце шаблона поиска, поскольку первая часть номера телефона код города, и существуют дополнительные символы после значения столбца.

З. Использование символов-шаблонов [ ]

В следующем примере производится поиск DimEmployee строк с имя Rob или Bob .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *