Поделиться через


PATINDEX (Transact-SQL)

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

Значок ссылки на разделСинтаксические обозначения в 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