Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

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

В 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 съкращение от регистр без значение.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е най-добрата практика за вмъкване на запис, ако той все още не съществува?

  2. Как да актуализирате първичен ключ

  3. Когато изпълнявате съхранена процедура, каква е ползата от използването на CommandType.StoredProcedure спрямо използването на CommandType.Text?

  4. Разберете дали даден обект е дефинирана от потребителя таблица в SQL Server с OBJECTPROPERTY()

  5. Как да се свържа с база данни MSSQL с помощта на DBI модула на Perl в Windows?