I SQL Server kan du använda T-SQL CHARINDEX()
funktion för att hitta startpositionen för ett teckenuttryck inom ett annat teckenuttryck.
Du tillhandahåller båda teckenuttrycken som argument. Du kan också ange ett valfritt argument för att ange en position där sökningen ska startas.
Syntax
Syntaxen ser ut så här:
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
Där expressionToFind är uttrycket du vill hitta i den andra strängen och expressionToSearch är den andra strängen. Den valfria startplats kan användas för att ange en position inom expressionToSearch som du ska börja söka efter.
Observera att endast positionen för den första förekomsten returneras.
Exempel
Här är ett exempel:
SELECT CHARINDEX('Bob', 'Bob gillar öl. Bob gillar också nötkött.') SOM Resultat;
Resultat:
+----------+| Resultat ||--------|| 1 |+----------+
I det här exemplet är det första argumentet Bob
, vilket betyder att vi söker efter det andra argumentet efter Bob
. Resultatet är 1 eftersom det är positionen där Bob
visas först i det andra argumentet.
Du kanske också märker att Bob
visas faktiskt två gånger i strängen, men endast positionen för den första matchningen returneras.
Ingen match
Om det andra argumentet inte innehöll Bob
resultatet skulle ha blivit 0
.
SELECT CHARINDEX('Bob', 'Kate gillar öl. Kate gillar också nötkött.') SOM Resultat;
Resultat:
+----------+| Resultat ||--------|| 0 |+----------+
Ange en startposition
Du kan (valfritt) ange en startposition för sökningen. Detta innebär att SQL Server hoppar över alla händelser som kommer före den startpositionen. Men resultaten rapporteras fortfarande baserat på dess position inom hela strängen (inte från din valda startposition).
Här är ett exempel att visa:
SELECT CHARINDEX('Bob', 'Bob gillar öl. Bob gillar också nötkött.', 16) SOM Resultat;
Resultat:
+----------+| Resultat ||--------|| 17 |+----------+
I det här exemplet börjar vi söka på position 16 (vilket råkar vara utrymmet före den andra Bob
). Resultatet är att den första förekomsten av Bob
hoppas över och den andras position återställs. Och vi kan se att dess position är 17 tecken från början av strängen (även om det bara är ett tecken från där vi började söka).
Skiftlägeskänslighet
Du kan uttryckligen utföra en skiftlägeskänslig sökning genom att lägga till COLLATE
sats till din SELECT
uttalande:
Här är ett exempel som inkluderar en skiftlägeskänslig sökning och en skiftlägesokänslig sökning:
SELECT CHARINDEX('Öl', 'Bob gillar öl.' COLLATE Latin1_General_CS_AS) AS 'Case-Sensitive', CHARINDEX('Öl', 'Bob gillar öl.' COLLATE Latin1_General_CI_AS) AS 'Case-Insensitive';Resultat:
+-------------------+--------------------+| Skiftlägeskänslig | Skiftlägeskänslig ||------------------------+------------------------|| 0 | 11 |+-------------------+------------------------+Den första är skiftlägeskänslig eftersom
_CS
(i sammanställningen) står för Case-Sensitive. Den andra är skiftlägeskänslig eftersom_CI
står för Case-Insensitive.