Функция SQL Server PATINDEX

В этом руководстве вы узнали, как использовать функцию SQL Server PATINDEX() для поиска позиции шаблона в строке.

Обзор SQL Server PATINDEX()

Функция PATINDEX() возвращает позицию первого вхождения шаблона в строку. Синтаксис функции PATINDEX() следующий:

PATINDEX( '%pattern%' , input_string )

Функция PATINDEX() принимает два аргумента:

  • шаблон — это символьное выражение, которое нужно найти. Он может содержать подстановочные знаки, такие как % и '_' в шаблоне. Значения подстановочных знаков такие же, как и в операторе LIKE.
  • input_string — строка символов, в которой выполняется поиск шаблона.

Функция PATINDEX() возвращает целое число, которое указывает позицию первого вхождения шаблона в input_string или ноль шаблона, если он не найден. Функция PATINDEX() вернет NULL, если либо шаблон, либо input_string равны NULL.

Обратите внимание, что PATINDEX() ищет шаблон на основе сортировки входных данных. Если вы хотите использовать определенную сортировку, вы можете явно использовать предложение COLLATE.

Примеры функций SQL Server PATINDEX()

Давайте рассмотрим несколько примеров использования функции PATINDEX().

A) Простой пример SQL Server PATINDEX()

В этом примере возвращается начальная позиция подстроки «ern» в строке «SQL Pattern Index»:

SELECT 
    PATINDEX('%ern%', 'SQL Pattern Index') position;

Вот что получилось:

position
-----------
9
(1 row affected)

B) Пример использования SQL Server PATINDEX() с несколькими подстановочными знаками

В этом примере используются подстановочные знаки % и _ для поиска позиции, с которой в строке «SQL Server String Function» начинается шаблон «f», за которым следуют любые два символа и «ction»:

SELECT 
    PATINDEX('%f__ction%', 'SQL Server String Function') position;

Вывод следующий:

Position
-----------
19
(1 row affected)

C) Пример использования функции PATINDEX() SQL Server с табличным столбцом

В этом примере выполняется поиск позиции первого вхождения шаблона 2018 в значениях столбца product_name в таблице production.products из образца базы данных.

SELECT    
    product_name, 
    PATINDEX('%2018%', product_name) position
FROM    
    production.products
WHERE 
    product_name LIKE '%2018%'
ORDER BY 
    product_name;

На следующем рисунке показан частичный вывод:

Пример функции PATINDEX для SQL Server

В этом руководстве вы узнали, как использовать функцию SQL Server PATINDEX() для поиска позиции первого вхождения шаблона в строку.

Мирослав С.

Автор статей, ИБ-специалист