sql >> Databasteknik >  >> RDS >> Sqlserver

Hur CHARINDEX()-funktionen fungerar i SQL Server (T-SQL)

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.


  1. Hitta det totala antalet resultat i mySQL-frågan med offset+limit

  2. Hybrid OLTP/Analytics Databas Workloads i Galera Cluster med asynkrona slavar

  3. hur man får rowNum-liknande kolumn i sqlite IPHONE

  4. Hur man lagrar återkommande datum med tanke på sommartid