В SQL Server можете да използвате T-SQL CHARINDEX()
функция за намиране на началната позиция на символен израз в друг символен израз.
Вие предоставяте и двата символни израза като аргументи. Можете също да предоставите незадължителен аргумент, за да посочите позиция, от която да започнете търсенето.
Синтаксис
Синтаксисът е така:
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
Където expressionToFind е изразът, който искате да намерите в другия низ, и expressionToSearch е другият низ. Незадължителният начално_местоположение може да се използва за определяне на позиция в рамките на expressionToSearch за което да започнете да търсите.
Имайте предвид, че се връща само позицията на първото появяване.
Пример
Ето един пример:
SELECT CHARINDEX('Боб', 'Боб обича бира. Боб също обича говеждо месо') КАТО Резултат;
Резултат:
+---------+| Резултат ||----------|| 1 |+---------+
В този пример първият аргумент е Bob
, което означава, че търсим втория аргумент за Bob
. Резултатът е 1, защото това е позицията, където Bob
първият се появява във втория аргумент.
Може също да забележите, че Bob
всъщност се появява два пъти в низа, но се връща само позицията на първото съвпадение.
Няма съвпадение
Ако вторият аргумент не съдържа Bob
резултатът би бил 0
.
SELECT CHARINDEX('Боб', 'Кейт обича бира. Кейт също обича говеждо месо.') КАТО Резултат;
Резултат:
+---------+| Резултат ||----------|| 0 |+---------+
Указване на начална позиция
Можете (по избор) да посочите начална позиция за търсене. Това означава, че SQL Server ще пропусне всяко събитие, което идва преди тази начална позиция. Резултатите обаче все още се отчитат въз основа на неговата позиция в целия низ (не от избраната от вас начална позиция).
Ето пример за демонстрация:
SELECT CHARINDEX('Боб', 'Боб обича бира. Боб също обича говеждо месо.', 16) КАТО Резултат;
Резултат:
+---------+| Резултат ||----------|| 17 |+---------+
В този пример започваме да търсим на позиция 16 (която се оказва пространството преди 2-ри Bob
). Резултатът е, че първото поява на Bob
се пропуска и позицията на втория се връща. И можем да видим, че позицията му е на 17 знака от началото на низа (въпреки че е само един знак от мястото, където започнахме търсенето).
Чувствителност на малки и малки букви
Можете изрично да извършите търсене, чувствително към малки и големи букви, като добавите COLLATE
клауза към вашия SELECT
изявление:
Ето пример, който включва търсене, чувствително към главни и малки букви:
SELECT CHARINDEX('Бира', 'Боб обича бира'. COLLATE Latin1_General_CS_AS) КАТО 'Чувствителен регистр', CHARINDEX('Бира', 'Боб обича бира.' COLLATE Latin1_General_CI_AS) КАТО 'Без значение на регистрите';; предварително>Резултат:
+------------------+-------------------+| Регистрът на буквите е чувствителен | Без значение на регистрите ||-----------------+-------------------|| 0 | 11 |+------------------+-------------------+Първият е чувствителен към малките букви, защото
_CS
(в съпоставянето) означава Чувствителен на регистър. Вторият е нечувствителен към главните букви, защото_CI
съкращение от регистр без значение.