In SQL Server kunt u de T-SQL CHARINDEX()
. gebruiken functie om de startpositie van een tekenuitdrukking binnen een andere tekenuitdrukking te vinden.
U geeft beide karakteruitdrukkingen op als argumenten. U kunt ook een optioneel argument opgeven om een positie op te geven waar de zoekopdracht moet worden gestart.
Syntaxis
De syntaxis gaat als volgt:
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
Waar expressionToFind is de uitdrukking die u in de andere tekenreeks wilt vinden, en expressionToSearch is de andere string. De optionele start_location kan worden gebruikt om een positie op te geven binnen expressionToSearch waarnaar u moet zoeken.
Merk op dat alleen de positie van het eerste exemplaar wordt geretourneerd.
Voorbeeld
Hier is een voorbeeld:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.') AS Result;
Resultaat:
+----------+ | Result | |----------| | 1 | +----------+
In dit voorbeeld is het eerste argument Bob
, wat betekent dat we zoeken naar het tweede argument voor Bob
. Het resultaat is 1 omdat dat de positie is waar Bob
verschijnt eerst in het tweede argument.
Het is je misschien ook opgevallen dat Bob
komt eigenlijk twee keer voor in de string, maar alleen de positie van de eerste match wordt geretourneerd.
Geen overeenkomst
Als het tweede argument Bob
. niet bevatte het resultaat zou 0
zijn geweest .
SELECT CHARINDEX('Bob', 'Kate likes beer. Kate also likes beef.') AS Result;
Resultaat:
+----------+ | Result | |----------| | 0 | +----------+
Een startpositie specificeren
U kunt (optioneel) een startpositie voor de zoekopdracht opgeven. Dit betekent dat SQL Server elke gebeurtenis overslaat die vóór die startpositie komt. De resultaten worden echter nog steeds gerapporteerd op basis van hun positie binnen de hele reeks (niet van de door u gekozen startpositie).
Hier is een voorbeeld om te demonstreren:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16) AS Result;
Resultaat:
+----------+ | Result | |----------| | 17 | +----------+
In dit voorbeeld beginnen we te zoeken op positie 16 (wat toevallig de spatie is voor de 2e Bob
). Het resultaat is dat het eerste voorkomen van Bob
wordt overgeslagen en de positie van de tweede wordt geretourneerd. En we kunnen zien dat de positie 17 tekens is vanaf het begin van de tekenreeks (ook al is het maar één teken vanaf het punt waar we zijn begonnen met zoeken).
Hoofdlettergevoeligheid
U kunt expliciet hoofdlettergevoelig zoeken door de COLLATE
. toe te voegen clausule toe aan uw SELECT
verklaring:
Hier is een voorbeeld met een hoofdlettergevoelige zoekopdracht en een niet-hoofdlettergevoelige zoekopdracht:
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';
Resultaat:
+------------------+--------------------+ | Case-Sensitive | Case-Insensitive | |------------------+--------------------| | 0 | 11 | +------------------+--------------------+
De eerste is hoofdlettergevoelig omdat _CS
(in de collatie) staat voor Case-Sensitive. De tweede is niet hoofdlettergevoelig omdat _CI
staat voor Hoofdlettergevoelig.