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
См. также
Справочник
Типы данных (Transact-SQL)
Строковые функции (Transact-SQL)
[ ] (Шаблон — символ(ы) для сопоставления) (Transact-SQL)
[^] (Несопоставленные символы-шаблоны) (Transact-SQL)
_ (шаблон — совпадение одного символа) (Transact-SQL)
% (символы-шаблоны — символы для совпадения) (Transact-SQL)