PATINDEX (Transact-SQL)
Для любого допустимого символьного или текстового типа данных возвращает начальную позицию первого вхождения шаблона в указанном выражении или нуль, если шаблон не найден. Дополнительные сведения см. в разделе Совпадение по шаблону в условиях поиска.
Синтаксис
PATINDEX ( '%pattern%' , expression )
Аргументы
'pattern'
Символьное выражение, содержащее последовательность символов, которую надо найти. Могут использоваться символы-шаблоны. При этом символ «%» должен указываться до и после аргумента pattern (за исключением случаев, когда производится поиск первых или последних символов).expression
Аргумент expression является обычно столбцом, в котором производится поиск по указанному шаблону. Аргумент expression должен относиться к строковому типу данных.
Типы возвращаемых данных
Тип bigint, если аргумент expression имеет тип varchar(max) или nvarchar(max), в противном случае — тип int.
Замечания
Если параметры pattern или expression имеют значение NULL, функция PATINDEX возвращает значение NULL.
Функция PATINDEX выполняет сравнение с учетом параметров сортировки входных значений. Для выполнения сравнения с помощью конкретных параметров сортировки можно воспользоваться предложением COLLATE, чтобы явно указать параметры сортировки для входных данных.
0x0000 (char(0)) является неопределенным символом в параметрах сортировки Windows и не может быть включен в предложение PATINDEX.
Примеры
А. Применение шаблона в функции PATINDEX
В следующем примере производится поиск позиции, с которой начинается шаблон ensure в указанной строке столбца DocumentSummary в таблице Document.
USE AdventureWorks2008R2;
GO
SELECT PATINDEX('%ensure%',DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO
Ниже приводится результирующий набор.
-----------
64
(1 row(s) affected)
Если не ограничить строки для поиска предложением WHERE, запрос возвращает все строки, содержащиеся в таблице, и выдает ненулевые значения для тех строк, в которых найден шаблон, либо нулевые для тех, где он не найден.
Б. Использование символов-шаблонов в функции PATINDEX
Следующий пример использует символы-шаблоны при поиске позиции, с которой начинается шаблон en_ure в указанной строке столбца DocumentSummary в таблице Document, где символ подчеркивания — это символ-шаблон, представляющий любой символ.
USE AdventureWorks2008R2;
GO
SELECT PATINDEX('%en_ure%', DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
GO
Ниже приводится результирующий набор.
------------
64
(1 row(s) affected)
Если не ограничить диапазон строк, в которых выполняется поиск, этот запрос возвратит все строки таблицы, отметив строки, в которых был обнаружен шаблон, ненулевыми значениями.
В. Применение COLLATE в функции PATINDEX
Следующий пример показывает, как функция COLLATE явно определяет параметры сортировки при поиске в выражении.
USE tempdb;
GO
SELECT PATINDEX ( '%ein%', 'Das ist ein Test' COLLATE Latin1_General_BIN) ;
GO
Г. Использование переменной для указания шаблона
В следующем примере используется переменная для передачи значения параметру pattern.
USE AdventureWorks2008R2;
GO
DECLARE @MyValue varchar(10) = 'safety';
SELECT PATINDEX('%' + @MyValue + '%', DocumentSummary)
FROM Production.Document
WHERE DocumentNode = 0x7B40;
Ниже приводится результирующий набор.
------------
22
См. также