PATINDEX (Transact-SQL)PATINDEX (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ:даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureдаParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database yesAzure SQL Data Warehouse yesParallel Data Warehouse

Для любого допустимого символьного или текстового типа данных возвращает начальную позицию первого вхождения шаблона в указанном выражении или нули, если шаблон не найден.Returns the starting position of the first occurrence of a pattern in a specified expression, or zeros if the pattern is not found, on all valid text and character data types.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

PATINDEX ( '%pattern%' , expression )  

АргументыArguments

patternpattern
Символьное выражение, содержащее последовательность символов, которую надо найти.Is a character expression that contains the sequence to be found. Можно использовать подстановочные знаки. При этом символ "%" должен указываться до и после аргумента pattern (за исключением случаев, когда производится поиск первых или последних символов).Wildcard characters can be used; however, the % character must come before and follow pattern (except when you search for first or last characters). pattern представляет собой выражение из категории типа данных "символьная строка".pattern is an expression of the character string data type category. Максимальная длина pattern — 8000 символов.pattern is limited to 8000 characters.

expressionexpression
Выражение, обычно столбец, в котором производится поиск по указанному шаблону.Is an expression, typically a column that is searched for the specified pattern. expression представляет собой выражение из категории типа данных "символьная строка".expression is of the character string data type category.

Типы возвращаемых данныхReturn Types

bigint, если expression имеет тип данных varchar(max) или nvarchar(max); в противном случае int.bigint if expression is of the varchar(max) or nvarchar(max) data types; otherwise int.

RemarksRemarks

Если аргумент pattern или expression имеет значение NULL, функция PATINDEX возвращает значение NULL.If either pattern or expression is NULL, PATINDEX returns NULL.

Функция PATINDEX выполняет сравнение с учетом параметров сортировки входных значений.PATINDEX performs comparisons based on the collation of the input. Для выполнения сравнения в указанных параметрах сортировки можно воспользоваться функцией COLLATE, чтобы явно указать параметры сортировки для входных данных.To perform a comparison in a specified collation, you can use COLLATE to apply an explicit collation to the input.

Дополнительные символы (суррогатные пары)Supplementary Characters (Surrogate Pairs)

При использовании параметров сортировки SC возвращаемое значение рассматривает любые суррогатные пары UTF-16 в параметре expression как один символ.When using SC collations, the return value will count any UTF-16 surrogate pairs in the expression parameter as a single character. Дополнительные сведения см. в статье Collation and Unicode Support.For more information, see Collation and Unicode Support.

Символ 0x0000 (char(0)) не определен в параметрах сортировки Windows, и его нельзя включать в PATINDEX.0x0000 (char(0)) is an undefined character in Windows collations and cannot be included in PATINDEX.

ПримерыExamples

A.A. Простой пример использования функции PATINDEXSimple PATINDEX example

В приведенном ниже примере в короткой строке символов (interesting data) проверяется начальная позиция символов ter.The following example checks a short character string (interesting data) for the starting location of the characters ter.

SELECT PATINDEX('%ter%', 'interesting data');  

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

3

Б.B. Использование шаблона в функции PATINDEXUsing a pattern with PATINDEX

В следующем примере производится поиск позиции, с которой начинается шаблон ensure в указанной строке столбца DocumentSummary в таблице Document в базе данных AdventureWorks2012AdventureWorks2012.The following example finds the position at which the pattern ensure starts in a specific row of the DocumentSummary column in the Document table in the AdventureWorks2012AdventureWorks2012 database.

SELECT PATINDEX('%ensure%',DocumentSummary)  
FROM Production.Document  
WHERE DocumentNode = 0x7B40;  
GO   

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

-----------  
64  
(1 row(s) affected)

Если не ограничить строки для поиска предложением WHERE, запрос возвращает все строки, содержащиеся в таблице, и выдает ненулевые значения для тех строк, в которых найден шаблон, либо нулевые для тех, где он не найден.If you do not restrict the rows to be searched by using a WHERE clause, the query returns all rows in the table and reports nonzero values for those rows in which the pattern was found, and zero for all rows in which the pattern was not found.

В.C. Использование символов-шаблонов в функции PATINDEXUsing wildcard characters with PATINDEX

В следующих примерах символы-шаблоны % и используются для поиска позиции, где в указанной строке (индекс начинается с позиции 1) начинается шаблон 'en', за которым следует один любой символ и 'ure':The following example uses % and wildcards to find the position at which the pattern 'en', followed by any one character and 'ure' starts in the specified string (index starts at 1):

SELECT PATINDEX('%en_ure%', 'please ensure the door is locked');  

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

-----------  
8  

PATINDEX работает аналогично LIKE, то есть можно можно использовать любой из этих шаблонов.PATINDEX works just like LIKE, so you can use any of the wildcards. Нет необходимости заключать шаблон в символы процентов (%).You do not have to enclose the pattern between percents. PATINDEX('a%', 'abc') возвращает 1 и PATINDEX('%a', 'cba') возвращает 3.PATINDEX('a%', 'abc') returns 1 and PATINDEX('%a', 'cba') returns 3.

В отличие от LIKE, PATINDEX возвращает позицию, аналогично CHARINDEX.Unlike LIKE, PATINDEX returns a position, similar to what CHARINDEX does.

Г.D. Использование предложения COLLATE в функции PATINDEXUsing COLLATE with PATINDEX

Следующий пример показывает, как функция COLLATE явно определяет параметры сортировки при поиске в выражении.The following example uses the COLLATE function to explicitly specify the collation of the expression that is searched.

USE tempdb;  
GO  
SELECT PATINDEX ( '%ein%', 'Das ist ein Test'  COLLATE Latin1_General_BIN) ;  
GO  

Д.E. Использование переменной для указания шаблонаUsing a variable to specify the pattern

В приведенном ниже примере значение передается в параметр pattern с помощью переменной.The following example uses a variable to pass a value to the pattern parameter. В этом примере используется база данных AdventureWorks2012AdventureWorks2012.This example uses the AdventureWorks2012AdventureWorks2012 database.

DECLARE @MyValue varchar(10) = 'safety';   
SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary)   
FROM Production.Document  
WHERE DocumentNode = 0x7B40;  

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

------------  
22

См. также:See Also

LIKE (Transact-SQL) LIKE (Transact-SQL)
CHARINDEX (Transact-SQL)CHARINDEX (Transact-SQL)
LEN (Transact-SQL)LEN (Transact-SQL)
Типы данных (Transact-SQL) Data Types (Transact-SQL)
Строковые функции (Transact-SQL) String Functions (Transact-SQL)
(символ-шаблон для сопоставления) (Transact-SQL) (Wildcard - Character(s) to Match) (Transact-SQL)
(символ-шаблон — совпадение не найдено) (Transact-SQL) (Wildcard - Character(s) Not to Match) (Transact-SQL)
_ (символ-шаблон — совпадение одного символа) (Transact-SQL) _ (Wildcard - Match One Character) (Transact-SQL)
Символ процента (символ-шаблон для сопоставления) (Transact-SQL)Percent character (Wildcard - Character(s) to Match) (Transact-SQL)