Много RDBMS имат INSTR()
функция, която ни позволява да намерим подниз в низ. Някои (като MySQL и MariaDB) също имат LOCATE()
функция и POSITION()
функция (също поддържана от PostgreSQL), които правят подобно нещо.
SQL Server няма INSTR()
функция. Нито има LOCATE()
или POSITION()
функция. Но той има CHARINDEX()
функция, която прави същото.
SQL Server също има PATINDEX()
функция, която върши подобна работа на CHARINDEX()
.
CHARINDEX()
Функция
Ето пример за CHARINDEX()
функция:
SELECT CHARINDEX('news', 'No news is good news');
Резултат:
4
Функцията приема трети аргумент, който ни позволява да посочим откъде да започнем търсенето:
SELECT CHARINDEX('news', 'No news is good news', 5);
Резултат:
17
В този пример започнахме търсенето на позиция 5, която беше след началото на първото появяване на news
, така че върна позицията на второто появяване.
PATINDEX()
Функция
PATINDEX()
функцията е подобна на CHARINDEX()
, с изключение на това, че ни позволява да търсим шаблон, а не конкретен низ.
Ето един пример, за да илюстрирам какво имам предвид:
SELECT PATINDEX('%ew%', 'No news is good news');
Резултат:
5
Ето какво се случва, ако премахна заместващите знаци:
SELECT PATINDEX('ew', 'No news is good news');
Резултат:
0
Вижте PATINDEX()
срещу CHARINDEX()
за повече за разликите между тези две функции.