Patindex ms sql: PATINDEX (Transact-SQL) — SQL Server

Функция

SQL Server PATINDEX на практических примерах

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

SQL Server

PATINDEX() обзор

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

 PATINDEX ('%pattern%', input_string)
  Язык кода: SQL (язык структурированных запросов) (sql)  

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

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

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

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

SQL Server

PATINDEX() примеры функций

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

A) SQL Server

PATINDEX() простой пример

В этом примере возвращается начальная позиция подстроки 'ern' в строке 'Индекс шаблона SQL' :

 SELECT
    PATINDEX('%ern%', 'Индекс шаблона SQL') position;
  Язык кода: SQL (язык структурированных запросов) (sql)  

Вот вывод:

 позиция
-----------
9
(затронута 1 строка) 

B) Использование SQL Server

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

любые два символа и 'action' начинается в строке 'SQL Server String Function' :

 SELECT
    PATINDEX('%f__ction%', 'Строковая функция SQL Server') position;
  Язык кода: SQL (язык структурированных запросов) (sql)  

Вывод выглядит следующим образом:

 Позиция
-----------
19
(затронута 1 строка) 

C) Использование функции SQL Server

PATINDEX() с примером столбца таблицы

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

 ВЫБЕРИТЕ
    наименование товара,
    PATINDEX('%2018%', product_name) позиция
ОТ
    производство.продукция
ГДЕ
    product_name НРАВИТСЯ '%2018%'
СОРТИРОВАТЬ ПО
    наименование товара;
  Язык кода: SQL (язык структурированных запросов) (sql)  

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

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

Как функция PATINDEX() работает в SQL Server (T-SQL)

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

Функция принимает два аргумента; узор и нить.

В шаблоне можно использовать подстановочные знаки.

Синтаксис

Синтаксис выглядит следующим образом:

 PATINDEX ('%шаблон%', выражение) 

Где шаблон — символьное выражение, содержащее искомую последовательность, а выражение — выражение, которое нужно найти. искал.

Пример 1 – Основное использование

Вот пример того, как это работает:

 SELECT PATINDEX('%eer%', 'Боб любит пиво.') AS Result; 

Результат:

 +----------+
| Результат |
|----------|
| 12 |
+----------+
 

Знак процента ( % ) — это подстановочный знак, представляющий любую строку из нуля или более символов.

Пример 2. Нет совпадений

Вот что происходит, когда мы не включаем подстановочные знаки:

 SELECT PATINDEX('eer', 'Боб любит пиво.') AS Result; 

Результат:

 +----------+
| Результат |
|----------|
| 0 |
+----------+
 

Хотя, если полная строка соответствует шаблону без подстановочных знаков, вы получите совпадение:

 SELECT PATINDEX('Bob', 'Bob') AS Result; 

Результат:

 +----------+
| Результат |
|----------|
| 1 |
+----------+
 

Однако вы не получите совпадения, если строка содержит больше символов:

 SELECT PATINDEX('Боб', 'Боб любит пиво. ') AS Result; 

Результат:

 +----------+
| Результат |
|----------|
| 0 |
+----------+
 

В этом случае можно использовать один подстановочный знак:

 SELECT PATINDEX('Боб%', 'Боб любит пиво.') AS Result; 

Результат:

 +----------+
| Результат |
|----------|
| 1 |
+----------+
 

Вы также можете использовать один подстановочный знак где-нибудь в середине шаблона:

 SELECT PATINDEX('B%r.', 'Боб любит пиво.') AS Result; 

Результат:

 +----------+
| Результат |
|----------|
| 1 |
+----------+
 

В этом случае мы получили совпадение, потому что начало и конец строки совпали с началом и концом шаблона. Конечно, середина строки также совпадала с серединой шаблона, потому что все остальные символы закрыты знаком процента.

Пример 3. Подстановочный знак подчеркивания

Вот еще один пример, где мы вводим еще один подстановочный знак:

 SELECT PATINDEX('B_er', 'Beer') AS Result; 

Результат:

 +----------+
| Результат |
|----------|
| 1 |
+----------+
 

Подчеркивание ( _ ), которое является подстановочным знаком для любого одиночного символа. Следовательно, он будет совпадать только в том случае, если в этой позиции есть ровно один символ.

Конечно, приведенный выше шаблон может соответствовать многим различным строкам. Например:

 ВЫБОР
  PATINDEX('B_er', 'Пиво') AS 'Пиво',
  PATINDEX('B_er', 'Bier') КАК 'Bier',
  PATINDEX('B_er', 'Baer') КАК 'Baer',
  PATINDEX('B_er', 'Ber') AS 'Ber'; 

Результат:

 +--------+--------+--------+--------+
| Пиво | Пиво | Бэр | Бэр |
|--------+--------+--------+--------|
| 1 | 1 | 1 | 1 |
+--------+--------+--------+--------+
 

Пример 4. Сравнение

_ и % Подстановочные знаки

Этот пример демонстрирует разницу между подстановочными знаками _ и % .

 ВЫБЕРИТЕ
  PATINDEX('B%r', 'Пиво') AS '%',
  PATINDEX('B_r', 'Пиво') AS '_',
  PATINDEX('B__r', 'Пиво') AS '__'; 

Результат:

 +-----+-----+------+
| % | _ | __ |
|-----+-----+------|
| 1 | 0 | 1 |
+-----+-----+------+
 

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

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

 SELECT
  PATINDEX('Пчела%r', 'Пиво') AS '%',
  PATINDEX('Bee_r', 'Пиво') AS '_',
  PATINDEX('Bee__r', 'Пиво') AS '__'; 

Результат:

 +-----+-----+------+
| % | _ | __ |
|-----+-----+------|
| 1 | 0 | 0 |
+-----+-----+------+
 

Пример 5. Пример базы данных

Вот пример использования этой функции в запросе к базе данных:

 ИСПОЛЬЗОВАНИЕ Музыка;
ВЫБИРАТЬ
  Название альбома,
  PATINDEX('%the%', AlbumName) AS 'Индекс шаблона'
ИЗ Альбомы
WHERE PATINDEX('%the%', AlbumName) > 0;
 

Результат:

 +-------------------------+----------------- +
| Название альбома | Указатель паттернов |
|-------------------------+-----------------|
| Пение вниз по переулку | 14 |
| Зилтоид Всеведущий | 9 |
| Нет молитвы за умирающих | 15 |
| Шестнадцать мужчин из Тайна | 1 |
+-------------------------+---+
 

В этом случае я использую предложение WHERE , чтобы вернуть только те альбомы, которые действительно совпадают, вместе с их результатом PATINDEX() . Если бы я удалил пункт WHERE , все альбомы были бы возвращены, независимо от того, совпадают они или нет.

Для тех, которые не совпадают, результат PATINDEX() будет равен нулю.

 ИСПОЛЬЗОВАНИЕ Музыка;
ВЫБЕРИТЕ ВЕРХНИЙ(10)
  Название альбома,
  PATINDEX('%the%', AlbumName) AS 'Индекс шаблона'
ИЗ Альбомов;
 

Результат:

 +-------------------------+----------------- +
| Название альбома | Указатель паттернов |
|-------------------------+-----------------|
| Силовой раб | 0 |
| Мощность | 0 |
| Пение вниз по переулку | 14 |
| Зилтоид Всеведущий | 9 |
| Жертвы Прохладного | 0 |
| Эпиклауд | 0 |
| Где-то во времени | 0 |
| Часть разума | 0 |
| Убийцы | 0 |
| Нет молитвы за умирающих | 15 |
+-------------------------+---+
 

Пример 6. Только первое вхождение

Как уже упоминалось, PATINDEX() возвращает только первых вхождений шаблона в строке.

 SELECT PATINDEX('%and%', 'Боб, пиво и попкорн.