Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come funziona la funzione CHARINDEX() in SQL Server (T-SQL)

In SQL Server è possibile utilizzare il CHARINDEX() T-SQL funzione per trovare la posizione iniziale di un'espressione di carattere all'interno di un'altra espressione di carattere.

Fornisci entrambe le espressioni di carattere come argomenti. Puoi anche fornire un argomento facoltativo per specificare una posizione in cui iniziare la ricerca.

Sintassi

La sintassi è questa:

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

Dove expressionToFind è l'espressione che vuoi trovare nell'altra stringa e expressionToSearch è l'altra stringa. La posizione_di_inizio facoltativa può essere utilizzato per specificare una posizione all'interno di expressionToSearch per cui iniziare la ricerca.

Nota che viene restituita solo la posizione della prima occorrenza.

Esempio

Ecco un esempio:

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

Risultato:

+----------+
| Result   |
|----------|
| 1        |
+----------+

In questo esempio, il primo argomento è Bob , il che significa che stiamo cercando il secondo argomento per Bob . Il risultato è 1 perché quella è la posizione in cui Bob appare prima nel secondo argomento.

Potresti anche notare che Bob in realtà appare due volte nella stringa, ma viene restituita solo la posizione della prima corrispondenza.

Nessuna corrispondenza

Se il secondo argomento non contiene Bob il risultato sarebbe stato 0 .

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

Risultato:

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

Specifica di una posizione di partenza

È possibile (facoltativamente) specificare una posizione iniziale per la ricerca. Ciò significa che SQL Server salterà qualsiasi occorrenza che precede quella posizione iniziale. Tuttavia, i risultati vengono comunque riportati in base alla sua posizione all'interno dell'intera stringa (non dalla posizione iniziale scelta).

Ecco un esempio da dimostrare:

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

Risultato:

+----------+
| Result   |
|----------|
| 17       |
+----------+

In questo esempio iniziamo la ricerca dalla posizione 16 (che è lo spazio prima del 2° Bob ). Il risultato è che la prima occorrenza di Bob viene saltato e viene restituita la posizione del secondo. E possiamo vedere che la sua posizione è a 17 caratteri dall'inizio della stringa (anche se è solo un carattere da dove abbiamo iniziato la ricerca).

Maiuscole/minuscole

Puoi eseguire esplicitamente una ricerca con distinzione tra maiuscole e minuscole aggiungendo il COLLATE clausola al tuo SELECT dichiarazione:

Ecco un esempio che include una ricerca con distinzione tra maiuscole e minuscole e una ricerca senza distinzione tra maiuscole e minuscole:

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';

Risultato:

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

Il primo fa distinzione tra maiuscole e minuscole perché _CS (nella raccolta) sta per Case-Sensitive. Il secondo non fa distinzione tra maiuscole e minuscole perché _CI sta per Case-Insensitive.