Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak znaleźć ciąg w ciągu w SQL Server

W SQL Server możesz użyć T-SQL CHARINDEX() funkcji lub PATINDEX() funkcja, aby znaleźć ciąg w innym ciągu. Oto krótki przegląd każdej funkcji.

Funkcja CHARINDEX()

Ta funkcja przyjmuje 3 argumenty; ciąg do znalezienia, ciąg do wyszukania i opcjonalna pozycja początkowa.

CHARINDEX() składnia wygląda tak:

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

Gdzie expressionToFind to wyrażenie, które chcesz znaleźć w drugim ciągu, a expressionToSearch to drugi ciąg. Opcjonalna start_location może służyć do określenia pozycji w expressionToSearch dla którego rozpocząć wyszukiwanie.

Zwróć uwagę, że zwracana jest tylko pozycja pierwszego wystąpienia.

Przykład

Oto przykład:

SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.');

Wynik:

1

W tym przykładzie pierwszym argumentem jest Bob , co oznacza, że ​​szukamy drugiego argumentu dla Bob . Wynik to 1, ponieważ jest to pozycja, w której Bob pierwszy pojawia się w drugim argumencie.

Możesz również zauważyć, że Bob faktycznie pojawia się dwa razy w ciągu, ale zwracana jest tylko pozycja pierwszego dopasowania.

Brak dopasowania

Jeśli drugi argument nie zawierał Bob wynik byłby 0 .

SELECT CHARINDEX('Kate', 'Bob likes beer. Bob also likes beef.');

Wynik:

0

Określanie pozycji startowej

Możesz określić pozycję początkową, od której chcesz rozpocząć wyszukiwanie. Oznacza to, że SQL Server pominie wszelkie zdarzenia, które pojawią się przed tą pozycją początkową. Jednak wyniki są nadal raportowane na podstawie ich pozycji w ciągu (nie od pozycji początkowej).

Jeśli brzmi to dezorientująco, powinien pomóc następujący przykład:

SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);

Wynik:

17

W tym przykładzie zaczynamy wyszukiwanie od pozycji 16 (która jest spacją przed drugim Bob ). W rezultacie pierwsze wystąpienie Bob zostanie pominięty, a pozycja drugiego zostanie zwrócona. I widzimy, że jego pozycja wynosi 17 znaków od początku ciągu (mimo że jest to tylko jeden znak od miejsca, w którym rozpoczęliśmy wyszukiwanie).

Rozróżnianie wielkości liter

Możesz jawnie przeprowadzić wyszukiwanie z uwzględnieniem wielkości liter, dodając klauzulę COLLATE do instrukcji SELECT:

Rozróżnianie wielkości liter

Oto wyszukiwanie z uwzględnieniem wielkości liter:

SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CS_AS);

Wynik:

0

Wielkość liter jest rozróżniana, ponieważ _CS oznacza wielkość liter.

Nie uwzględnia wielkości liter

A oto wyszukiwanie bez rozróżniania wielkości liter:

SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CI_AS);

Wynik:

11

Wielkość liter nie jest rozróżniana, ponieważ _CI oznacza wielkość liter bez uwzględniania.

Funkcja PATINDEX()

PATINDEX() funkcja wykonuje podobne zadanie do CHARINDEX() . Zasadniczo masz wybór, którego użyć. Główna różnica tkwi w składni.

PATINDEX() składnia funkcji wygląda następująco:

PATINDEX ( '%pattern%' , expression )

Gdzie wzór to wyrażenie znakowe, które zawiera sekwencję do znalezienia, a wyrażenie to wyrażenie do przeszukania (zazwyczaj kolumna).

PATINDEX() akceptuje znaki wieloznaczne, ale nie pozycję początkową. CHARINDEX() z drugiej strony akceptuje pozycję początkową, ale nie symbole wieloznaczne.

Przykłady

Oto przykład:

SELECT PATINDEX('%eer%', 'Bob likes beer.');

Wynik:

12

Oto jednak, co się dzieje, gdy nie uwzględniamy symboli wieloznacznych:

SELECT PATINDEX('eer', 'Bob likes beer.');

Wynik:

0

Oto kolejny przykład, w którym wprowadzamy kolejny znak wieloznaczny:

SELECT PATINDEX('%b_er%', 'Bob likes beer.');

Wynik:

11

W tym przypadku podkreślenie (_ ), który jest symbolem wieloznacznym dla dowolnego pojedynczego znaku.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak mogę wykonać kopię zapasową zdalnej bazy danych SQL Server na dysku lokalnym?

  2. Praktyczny wybór procesorów dla obciążeń SQL Server 2014/2016 OLTP

  3. Dopasowywanie rozmyte SQL

  4. Preferowana metoda przechowywania haseł w bazie danych

  5. SQL Pivot z wieloma kolumnami