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


PATINDEX (Transact-SQL)

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

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

Синтаксис

PATINDEX ( '%pattern%' , expression )

Аргументы

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

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

Типы возвращаемых данных

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

Замечания

Если значение аргумента pattern или аргумента expression равно NULL, при уровне совместимости базы данных 70 функция PATINDEX возвращает NULL. Если уровень совместимости базы данных равен 65 или меньше, PATINDEX возвращает NULL только в тех случаях, когда аргументы pattern и expression равны NULL.

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

Примеры

А. Применение шаблона в функции PATINDEX

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

USE AdventureWorks;
GO
SELECT PATINDEX('%ensure%',DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
GO

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

----------- 
64          

(1 row(s) affected)

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

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

Следующий пример использует символы-шаблоны при поиске позиции, с которой начинается шаблон en_ure в указанной строке столбца DocumentSummary в таблице Document, где символ подчеркивания — это символ-шаблон, представляющий любой символ.

USE AdventureWorks;
GO
SELECT PATINDEX('%en_ure%', DocumentSummary)
FROM Production.Document
WHERE DocumentID = 3;
GO

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

------------
64

(1 row(s) affected)

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

В. Применение COLLATE в функции PATINDEX

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

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