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

Jak działa funkcja CHARINDEX() w SQL Server (T-SQL)

W SQL Server możesz użyć T-SQL CHARINDEX() funkcja, aby znaleźć początkową pozycję wyrażenia znakowego w innym wyrażeniu znakowym.

Jako argumenty podajesz oba wyrażenia znakowe. Możesz również podać opcjonalny argument, aby określić pozycję, w której należy rozpocząć wyszukiwanie.

Składnia

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.') AS Result;

Wynik:

+----------+
| Result   |
|----------|
| 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('Bob', 'Kate likes beer. Kate also likes beef.') AS Result;

Wynik:

+----------+
| Result   |
|----------|
| 0        |
+----------+

Określanie pozycji startowej

Możesz (opcjonalnie) określić pozycję początkową wyszukiwania. 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 całym ciągu (nie z wybranej przez Ciebie pozycji początkowej).

Oto przykład do zademonstrowania:

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

Wynik:

+----------+
| Result   |
|----------|
| 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 COLLATE klauzula do twojego SELECT oświadczenie:

Oto przykład, który obejmuje wyszukiwanie z rozróżnianiem wielkości liter i wyszukiwanie bez rozróżniania wielkości liter:

SELECT 
  CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CS_AS) AS 'Case-Sensitive',
  CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CI_AS) AS 'Case-Insensitive';

Wynik:

+------------------+--------------------+
| Case-Sensitive   | Case-Insensitive   |
|------------------+--------------------|
| 0                | 11                 |
+------------------+--------------------+

W pierwszym z nich rozróżniana jest wielkość liter, ponieważ _CS (w zestawieniu) oznacza Case-Sensitive. Drugi nie uwzględnia wielkości liter, ponieważ _CI oznacza wielkość liter bez uwzględniania.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DAY() Przykłady w SQL Server (T-SQL)

  2. Czy ten kod zapobiega wstrzykiwaniu SQL?

  3. Zwróć listę profili poczty bazy danych w SQL Server (T-SQL)

  4. 2 sposoby na uzyskanie domyślnego języka logowania w SQL Server (T-SQL)

  5. Jak zastąpić NULL inną wartością w SQL Server – ISNULL()