loading..
Русский    English
01:58
листать

Функции CHARINDEX и PATINDEX

Функция CHARINDEX имеет синтаксис:

  1. CHARINDEX( искомое_выражение, строковое_выражение [, стартовая_позиция ])

Здесь необязательный целочисленный параметр стартовая_позиция определяет позицию в строковом выражении, начиная с которой выполняется поиск. Если этот параметр опущен, поиск выполняется от начала строкового_выражения. Например, запрос

Консоль
Выполнить
  1. SELECT name
  2. FROM Ships
  3. WHERE CHARINDEX('sh', name) > 0
будет выводить те корабли, в которых имеется сочетание символов «sh». Здесь используется тот факт, что если искомая строка не будет обнаружена, то функция CHARINDEX возвращает 0. Результат выполнения запроса будет содержать следующие корабли:

name
Kirishima
Musashi
Washington

Следует отметить, что если искомая подстрока либо строковое выражение есть NULL, то результатом функции тоже будет NULL.

Следующий пример определяет позиции первого и второго вхождения символа a в имени корабля California:

Консоль
Выполнить
  1. SELECT CHARINDEX('a',name) first_a,
  2. CHARINDEX('a', name, CHARINDEX('a', name)+1) second_a
  3. FROM Ships
  4. WHERE name='California'

Обратите внимание, что при определении второго символа в функции CHARINDEX используется стартовая позиция, которой является позиция следующего за первой буквой a символа — CHARINDEX('a', name)+1. Правильность результата — 2 и 10 — легко проверить.

Функция PATINDEX имеет следующий синтаксис:

  1. PATINDEX( '%образец%' , строковое_выражение )

Главное отличие этой функции от CHARINDEX заключается в том, что поисковая строка может содержать подстановочные знаки — % и _. При этом концевые знаки % являются обязательными. Например, использование этой функции в первом примере будет иметь вид

Консоль
Выполнить
  1. SELECT name
  2. FROM Ships
  3. WHERE PATINDEX('%sh%', name) > 0

А вот, например, как можно найти имена кораблей, которые содержат последовательность из трех символов, первый и последний из которых есть e:

Консоль
Выполнить
  1. SELECT name
  2. FROM Ships
  3. WHERE PATINDEX('%e_e%', name) > 0

Результат выполнения этого запроса выглядит следующим образом:

Name
Revenge
Royal Sovereign

Рекомендуемые упражнения: 136
Bookmark and Share
Тэги:
ALL AND AUTO_INCREMENT AVG battles CASE CAST CHAR CHARINDEX CHECK classes COALESCE Convert COUNT CROSS APPLY CTE DATEDIFF DATENAME DATEPART DATETIME DDL DEFAULT DELETE DISTINCT DML EXCEPT EXISTS EXTRACT FROM FULL JOIN GROUP BY Guadalcanal HAVING IDENTITY IN INNER JOIN insert INTERSECT IS NOT NULL ISNULL laptop LEFT LEFT OUTER JOIN LEN maker MAX MIN MONTH MySQL NOT Больше тэгов
Учебник обновлялся
месяц назад
©SQL-EX,2008 [Развитие] [Связь] [О проекте] [Ссылки] [Team]
Перепечатка материалов сайта возможна только с разрешения автора.
Rambler's Top100