Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к:SQL Server
База данных Azure SQL
Управляемый экземпляр Azure SQL
Azure Synapse Analytics
Система платформы аналитики (PDW)
Конечная точка SQL аналитики в Microsoft Fabric
Хранилище в Microsoft Fabric
База данных SQL в Microsoft Fabric
Возвращает начальную позицию первого вхождения шаблона в указанном выражении или ноль, если шаблон не найден, на всех допустимых типах текстовых и символьных данных.
Соглашения о синтаксисе Transact-SQL
Syntax
PATINDEX ( '%pattern%' , expression )
Arguments
pattern
Символьное выражение, содержащее найденную последовательность. Можно использовать персонажей с уайлдкардом; однако % персонаж должен быть перед и следовать шаблону (кроме случаев, когда вы ищете первые или последние символы). pattern — это выражение категории типа данных строки символов. Шаблон ограничен 8 000 символов.
Note
Хотя традиционные регулярные выражения изначально не поддерживаются в SQL Server 2022 (16.x) и более ранних версиях, аналогичные сложные сопоставления шаблонов можно достичь с помощью различных подстановочных выражений. См. документацию по операторам строк для более подробной информации о синтаксисе джокера. Для получения информации о функциях регулярных выражений в SQL Server 2025 (17.x) см. функции регулярных выражений.
expression
Выражение, обычно столбца, по которому искают указанный шаблон. выражение относится к категории типа данных строк символов.
Типы возвращаемых данных
bigint , если выражение относится к типам данных varchar(max) или nvarchar(max ); В противном случае интеллект.
Remarks
Если шаблон равен NULL, PATINDEX возвращает NULL.
Если выражение равно NULL, PATINDEX возвращает ошибку.
Начальная позиция для PATINDEX .1
PATINDEX выполняет сравнения на основе сортировки входных данных. Чтобы выполнить сравнение в указанной сортировке, можно использовать COLLATE для применения явной сортировки к входным данным.
Дополнительные символы (суррогатные пары)
Когда вы используете колляции с дополнительными символами (SC), возвращаемое значение учитывает любые пары суррогатных материй UTF-16 в параметре выражения как один символ. Для получения дополнительной информации см. Сортировка и поддержка Юникода.
0x0000 (char(0)) — это неопределенный символ в параметрах сортировки Windows и не может быть включен в PATINDEXнего.
Examples
A. Базовый пример PATINDEX
В приведенном ниже примере в короткой строке символов (interesting data) проверяется начальная позиция символов ter.
SELECT PATINDEX('%ter%', 'interesting data') AS position;
Вот результирующий набор.
position
--------
3
B. Использование шаблона с PATINDEX
Следующий пример показывает позицию, с которой начинается паттерн ensure в определённой строке DocumentSummary столбца Document таблицы базы данных AdventureWorks2025.
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
В следующем примере [^]оператор строки используется для поиска положения символа, который не является числом, буквой или пробелом.
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. Использование переменной для указания шаблона
В следующем примере используется переменная для передачи значения параметру шаблона . В этом примере используется база данных AdventureWorks2025.
DECLARE @MyValue AS VARCHAR (10) = 'safety';
SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary) AS position
FROM Production.Document
WHERE DocumentNode = 0x7B40;
Вот результирующий набор.
position
--------
22
Связанный контент
- КАК (Transact-SQL)
- CHARINDEX (Transact-SQL)
- ЛЕН (Transact-SQL)
- типы данных (Transact-SQL)
- Строковые функции (Transact-SQL)
- [ ] (Подстановочный знак — символы для сопоставления) (Transact-SQL)
- [^] (Подстановочный знак — символы не совпадают) (Transact-SQL)
- _ (подстановочный знак — соответствует одному символу) (Transact-SQL)
- Процент символов (подстановочные знаки для сопоставления) (Transact-SQL)