PATINDEX (Transact-SQL)

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

Значок ссылки на раздел Соглашения о синтаксическом обозначении в Transact-SQL

Синтаксис

PATINDEX ( '%pattern%' , expression )

Аргументы

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

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

Возвращаемые типы

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

Замечания

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

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

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

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

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

Примеры

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

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

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

Ниже приводится результирующий набор.

-----------

64

(1 row(s) affected)

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

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

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

  SELECT PATINDEX('%en_ure%', 'please ensure the door is locked');
 

Ниже приводится результирующий набор.

------------

8

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

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

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

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

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

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

В следующем примере значение передается параметру pattern с помощью переменной.

USE AdventureWorks2012; 
GO
DECLARE @MyValue varchar(10) = 'safety'; 

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

Ниже приводится результирующий набор.

------------

22

См. также

Справочник

Типы данных (Transact-SQL)

Строковые функции (Transact-SQL)

[ ] (Шаблон — символ(ы) для сопоставления) (Transact-SQL)

[^] (Cимволы-шаблоны несовпадения) (Transact-SQL)

_ (шаблон — совпадение одного символа) (Transact-SQL)

Символ процента (Cимволы-шаблоны совпадения) (Transact-SQL)