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.