PATINDEX (Transact-SQL)

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Управляемый экземпляр SQL Azure Конечная точка аналитики аналитики Synapse Analytics Analytics (PDW)SQL Analyticsв Microsoft FabricХранилище в Microsoft Fabric

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

PATINDEX ( '%pattern%' , expression )  

Примечание.

Сведения о синтаксисе Transact-SQL для SQL Server 2014 (12.x) и более ранних версиях см . в документации по предыдущим версиям.

Аргументы

pattern
Символьное выражение, содержащее последовательность символов, которую надо найти. Можно использовать подстановочные знаки. При этом символ "%" должен указываться до и после аргумента pattern (за исключением случаев, когда производится поиск первых или последних символов). pattern представляет собой выражение из категории типа данных "символьная строка". Максимальная длина pattern — 8000 символов.

Примечание.

Хотя традиционные регулярные выражения не поддерживаются в SQL Server, аналогичные сложные сопоставления шаблонов можно достичь с помощью различных диких выражений карта. Дополнительные сведения о синтаксисе с подстановочными знаками см. в разделе документации Строковые операторы.

выражение
Выражение, обычно столбец, в котором производится поиск по указанному шаблону. expression представляет собой выражение из категории типа данных "символьная строка".

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

bigint, если expression имеет тип данных varchar(max) или nvarchar(max); в противном случае int.

Замечания

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

Начальная позиция PATINDEX — это 1.

Функция PATINDEX выполняет сравнение с учетом параметров сортировки входных значений. Для выполнения сравнения в указанных параметрах сортировки можно воспользоваться функцией COLLATE, чтобы явно указать параметры сортировки для входных данных.

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

При использовании параметров сортировки SC возвращаемое значение рассматривает любые суррогатные пары UTF-16 в параметре expression как один символ. Дополнительные сведения см. в статье Collation and Unicode Support.

Символ 0x0000 (char(0)) не определен в параметрах сортировки Windows, и его нельзя включать в PATINDEX.

Примеры

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

В приведенном ниже примере в короткой строке символов (interesting data) проверяется начальная позиция символов ter.

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

Результирующий набор:

position
--------
3

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

В следующем примере обнаруживается позиция, с которой начинается шаблон ensure в определенной строке столбца DocumentSummary в таблице в Document базе данных AdventureWorks2022.

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

Результирующий набор:

position
--------  
64  

Если не ограничить строки для поиска предложением WHERE, запрос возвращает все строки, содержащиеся в таблице, и выдает ненулевые значения для тех строк, в которых найден шаблон, либо нулевые для тех, где он не найден.

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

В следующих примерах символы-шаблоны % и _ используются для поиска позиции, где в указанной строке (индекс начинается с позиции 1) начинается шаблон 'en', за которым следует один любой символ и 'ure':

SELECT position = PATINDEX('%en_ure%', 'Please ensure the door is locked!');  

Результирующий набор:

position
--------  
8  

PATINDEX работает аналогично LIKE, то есть можно можно использовать любой из этих шаблонов. Нет необходимости заключать шаблон в символы процентов (%). PATINDEX('a%', 'abc') возвращает 1 и PATINDEX('%a', 'cba') возвращает 3.

В отличие от LIKE, PATINDEX возвращает позицию, аналогично CHARINDEX.

D. Использование сложных выражений с подстановочными знаками с PATINDEX

В следующем примере строковый оператор[^] используется для поиска позиции символа, который не является числом, буквой или пробелом.

SELECT position = PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!'); 

Результирующий набор:

position
--------
33

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

Следующий пример показывает, как функция COLLATE явно определяет параметры сортировки при поиске в выражении.

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

Результирующий набор:

position
--------
9

F. Использование переменной для указания шаблона

В приведенном ниже примере значение передается в параметр pattern с помощью переменной. В этом примере используется база данных AdventureWorks2022.

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

Результирующий набор:

position
--------  
22

См. также

LIKE (Transact-SQL)
CHARINDEX (Transact-SQL)
LEN (Transact-SQL)
Типы данных (Transact-SQL)
Строковые функции (Transact-SQL)
(подстановочный знак — символы для сопоставления) (Transact-SQL)
(символы-шаблоны не для сопоставления) (Transact-SQL)
_ (Wild карта — соответствие одному символу) (Transact-SQL)
Процент символов (Wild карта — символы для сопоставления) (Transact-SQL)