sql >> Database >  >> RDS >> Sqlserver

Hoe een string in een string in SQL Server te vinden

In SQL Server kunt u de T-SQL CHARINDEX() . gebruiken functie of de PATINDEX() functie om een ​​string binnen een andere string te vinden. Hier is een kort overzicht van elke functie.

De CHARINDEX()-functie

Deze functie accepteert 3 argumenten; de string om te zoeken, de string om te zoeken, en een optionele startpositie.

De CHARINDEX() 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.');

Resultaat:

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('Kate', 'Bob likes beer. Bob also likes beef.');

Resultaat:

0

Een startpositie specificeren

U kunt een startpositie opgeven waar u wilt beginnen met zoeken. Dit betekent dat SQL Server elke gebeurtenis overslaat die vóór die startpositie komt. De resultaten worden echter nog steeds gerapporteerd op basis van de positie binnen de string (niet vanaf de startpositie).

Als dit verwarrend klinkt, zou het volgende voorbeeld moeten helpen:

SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);

Resultaat:

17

Dus 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-clausule toe te voegen aan uw SELECT-instructie:

Hoofdlettergevoelig

Hier is een hoofdlettergevoelige zoekopdracht:

SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CS_AS);

Resultaat:

0

Dit is hoofdlettergevoelig omdat _CS staat voor Case-Sensitive.

Hoofdlettergevoelig

En hier is een hoofdletterongevoelige zoekopdracht:

SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CI_AS);

Resultaat:

11

Dit is niet hoofdlettergevoelig omdat _CI staat voor Hoofdlettergevoelig.

De PATINDEX() Functie

De PATINDEX() functie doet hetzelfde als CHARINDEX() . Je hebt in principe de keuze welke je wilt gebruiken. Het belangrijkste verschil zit in de syntaxis.

De PATINDEX() de syntaxis van de functie gaat als volgt:

PATINDEX ( '%pattern%' , expression )

Waar patroon is een tekenuitdrukking die de te vinden reeks bevat, en uitdrukking is de uitdrukking waarin moet worden gezocht (meestal een kolom).

De PATINDEX() accepteert jokertekens, maar geen startpositie. CHARINDEX() aan de andere kant accepteert een startpositie, maar geen jokertekens.

Voorbeelden

Hier is een voorbeeld:

SELECT PATINDEX('%eer%', 'Bob likes beer.');

Resultaat:

12

Dit is echter wat er gebeurt als we de jokertekens niet opnemen:

SELECT PATINDEX('eer', 'Bob likes beer.');

Resultaat:

0

Hier is nog een voorbeeld waarin we een ander jokerteken introduceren:

SELECT PATINDEX('%b_er%', 'Bob likes beer.');

Resultaat:

11

In dit geval is het onderstrepingsteken (_ ) wat een jokerteken is voor elk afzonderlijk teken.


  1. Wat is de locatie van mysql-client .my.cnf in XAMPP voor Windows?

  2. T-SQL Cast versus converteren

  3. MySQL my.ini-locatie

  4. MAKETIME() Voorbeelden – MySQL