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

Sådan fungerer CHARINDEX()-funktionen i SQL Server (T-SQL)

I SQL Server kan du bruge T-SQL CHARINDEX() funktion til at finde startpositionen for et tegnudtryk i et andet tegnudtryk.

Du giver begge tegnudtryk som argumenter. Du kan også angive et valgfrit argument for at angive en position, hvor søgningen skal startes.

Syntaks

Syntaksen ser sådan ud:

CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )

Hvor expressionToFind er det udtryk, du vil finde i den anden streng, og expressionToSearch er den anden streng. Den valgfri start_placering kan bruges til at angive en position i expressionToSearch som du skal begynde at søge efter.

Bemærk, at kun positionen for den første forekomst returneres.

Eksempel

Her er et eksempel:

SELECT CHARINDEX('Bob', 'Bob kan lide øl. Bob kan også lide oksekød.') SOM Resultat;

Resultat:

+----------+| Resultat ||--------|| 1 |+----------+

I dette eksempel er det første argument Bob , hvilket betyder, at vi søger efter det andet argument for Bob . Resultatet er 1, fordi det er den position, hvor Bob vises først i det andet argument.

Du bemærker måske også, at Bob vises faktisk to gange i strengen, men kun positionen for det første match returneres.

Ingen match

Hvis det andet argument ikke indeholdt Bob resultatet ville have været 0 .

SELECT CHARINDEX('Bob', 'Kate kan lide øl. Kate kan også lide oksekød.') SOM Resultat;

Resultat:

+----------+| Resultat ||--------|| 0 |+----------+

Specificering af en startposition

Du kan (valgfrit) angive en startposition for søgningen. Dette betyder, at SQL Server vil springe enhver forekomst, der kommer før den startposition, over. Resultaterne rapporteres dog stadig baseret på dens position inden for hele strengen (ikke fra din valgte startposition).

Her er et eksempel til demonstration:

SELECT CHARINDEX('Bob', 'Bob kan lide øl. Bob kan også lide oksekød.', 16) SOM Resultat;

Resultat:

+----------+| Resultat ||--------|| 17 |+----------+

I dette eksempel begynder vi at søge på position 16 (som tilfældigvis er mellemrummet før den 2. Bob ). Resultatet er, at den første forekomst af Bob springes over, og den andens position returneres. Og vi kan se, at dens position er 17 tegn fra begyndelsen af ​​strengen (selvom det kun er ét tegn, hvorfra vi begyndte at søge).

Skabsfølsomhed

Du kan eksplicit udføre en søgning, der skelner mellem store og små bogstaver, ved at tilføje COLLATE klausul til din SELECT erklæring:

Her er et eksempel, der inkluderer en søgning, der skelner mellem store og små bogstaver, og en søgning, der skelner mellem store og små bogstaver:

SELECT CHARINDEX('Øl', 'Bob kan lide øl.' COLLATE Latin1_General_CS_AS) AS 'Case-Sensitive', CHARINDEX('Øl', 'Bob kan lide øl.' COLLATE Latin1_General_CI_AS) AS 'Case-Insensitive'; 

Resultat:

+-------------------+--------------------+| Versalfølsomt | Skifter ikke på store og små bogstaver ||------------------------+------------------------|| 0 | 11 |+-------------------+------------------------+

Den første skelner mellem store og små bogstaver, fordi _CS (i kollationen) står for Case-Sensitive. Den anden skiller ikke mellem store og små bogstaver, fordi _CI står for Case-Insensitive.


  1. Oracle SQL Query logning

  2. Forespørgsel om at beregne både kumulativ og samlet SUM over løn

  3. Sådan fungerer MATCH()-funktionen i MySQL

  4. Lær, hvordan du sikkerhedskopierer din MySQL-database