Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Applies to:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL analytics endpoint in Microsoft Fabric
Warehouse in Microsoft Fabric
Возвращает начальную позицию первого вхождения шаблона в указанном выражении или ноль, если шаблон не найден, на всех допустимых типах текстовых и символьных данных.
Соглашения о синтаксисе Transact-SQL
Syntax
PATINDEX ( '%pattern%' , expression )
Arguments
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 is an expression of the character string data type category. pattern is limited to 8,000 characters.
Note
Хотя традиционные регулярные выражения изначально не поддерживаются в SQL Server 2022 (16.x) и более ранних версиях, аналогичные сложные сопоставления шаблонов можно достичь с помощью различных подстановочных выражений. See the String operators documentation for more detail on wildcard syntax. Сведения о функциях регулярного выражения в предварительной версии SQL Server 2025 (17.x) см. в разделе "Функции регулярных выражений".
expression
An expression, typically a column that is searched for the specified pattern. expression is of the character string data type category.
Return types
bigint if expression is of the varchar(max) or nvarchar(max) data types; otherwise int.
Remarks
If pattern is NULL
, PATINDEX
returns NULL
.
Если выражение равно NULL
, PATINDEX
возвращает ошибку.
Начальная позиция для PATINDEX
.1
PATINDEX
выполняет сравнения на основе сортировки входных данных. Чтобы выполнить сравнение в указанной сортировке, можно использовать COLLATE
для применения явной сортировки к входным данным.
Дополнительные символы (суррогатные пары)
When you use collations with supplementary characters (SC), the return value counts any UTF-16 surrogate pairs in the expression parameter as a single character. Для получения дополнительной информации см. Сортировка и поддержка Юникода.
0x0000
(char(0)) is an undefined character in Windows collations and can't be included in PATINDEX
.
Examples
A. Базовый пример PATINDEX
В приведенном ниже примере в короткой строке символов (interesting data
) проверяется начальная позиция символов ter
.
SELECT PATINDEX('%ter%', 'interesting data') AS position;
Вот результирующий набор.
position
--------
3
B. Использование шаблона с PATINDEX
В следующем примере обнаруживается позиция, с которой начинается шаблон ensure
в определенной строке столбца DocumentSummary
в таблице в Document
базе данных AdventureWorks2022.
SELECT PATINDEX('%ensure%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO
Вот результирующий набор.
position
--------
64
Если вы не ограничиваете поиск строк с помощью WHERE
предложения, запрос возвращает все строки таблицы и сообщает ненулевое значение для этих строк, в которых найден шаблон, и ноль для всех строк, в которых шаблон не найден.
C. Использование подстановочных знаков с ПОМОЩЬЮ PATINDEX
В следующих примерах символы-шаблоны % и _ используются для поиска позиции, где в указанной строке (индекс начинается с позиции 1) начинается шаблон 'en'
, за которым следует один любой символ и 'ure'
:
SELECT PATINDEX('%en_ure%', 'Please ensure the door is locked!') AS position;
Вот результирующий набор.
position
--------
8
PATINDEX
работает аналогично LIKE
, то есть можно можно использовать любой из этих шаблонов. Вам не нужно заключать шаблон между процентами.
PATINDEX('a%', 'abc')
возвращает 1 и PATINDEX('%a', 'cba')
возвращает 3.
В отличие от LIKE
, PATINDEX
возвращает позицию, аналогично CHARINDEX
.
D. Использование сложных подстановочных знаков с ПОМОЩЬЮ PATINDEX
The following example uses the [^]
string operator to find the position of a character that isn't a number, letter, or space.
SELECT PATINDEX('%[^ 0-9A-Za-z]%', 'Please ensure the door is locked!') AS position;
Вот результирующий набор.
position
--------
33
E. Использование COLLATE с PATINDEX
Следующий пример показывает, как функция COLLATE
явно определяет параметры сортировки при поиске в выражении.
USE tempdb;
GO
SELECT PATINDEX('%ein%', 'Das ist ein Test' COLLATE Latin1_General_BIN);
GO
Вот результирующий набор.
position
--------
9
F. Использование переменной для указания шаблона
The following example uses a variable to pass a value to the pattern parameter. В этом примере используется база данных AdventureWorks2022.
DECLARE @MyValue AS VARCHAR (10) = 'safety';
SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
Вот результирующий набор.
position
--------
22
Related content
- LIKE (Transact-SQL)
- CHARINDEX (Transact-SQL)
- LEN (Transact-SQL)
- типы данных (Transact-SQL)
- Строковые функции (Transact-SQL)
- [ ] (Подстановочный знак — символы для сопоставления) (Transact-SQL)
- [^] (Подстановочный знак — символы не совпадают) (Transact-SQL)
- _ (подстановочный знак — соответствует одному символу) (Transact-SQL)
- Процент символов (подстановочные знаки для сопоставления) (Transact-SQL)