Database.Guide

I SQL Server kan DU bruke T-SQLPATINDEX() – funksjonen til å finne et mønster i en streng. Spesifikt returnerer funksjonen bare den første forekomsten av mønsteret i strengen.

funksjonen godtar to argumenter; mønsteret og strengen.

du kan bruke jokertegn i mønsteret.

Syntaks

syntaksen går slik:

PATINDEX ( '%pattern%' , expression )

hvor mønster er et tegnuttrykk som inneholder sekvensen som skal finnes, og uttrykk er uttrykket som skal søkes.

Eksempel 1 – Grunnleggende Bruk

her er et eksempel på hvordan det fungerer:

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

Resultat:

+----------+| Result ||----------|| 12 |+----------+

prosenttegnet (%) er et jokertegn som representerer alle streng med null eller flere tegn.

Eksempel 2 – Ingen Treff

her er hva som skjer når vi ikke inkluderer jokertegn:

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

Resultat:

+----------+| Result ||----------|| 0 |+----------+

Selv om, hvis hele strengen samsvarer med mønsteret uten noen jokertegn, får du en kamp:

SELECT PATINDEX('Bob', 'Bob') AS Result;

Resultat:

+----------+| Result ||----------|| 1 |+----------+

du får imidlertid ikke samsvar hvis strengen inneholder flere tegn:

SELECT PATINDEX('Bob', 'Bob likes beer.') AS Result;

resultat:

+----------+| Result ||----------|| 0 |+----------+

i så fall kan du bruke et enkelt jokertegn:

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

resultat:

+----------+| Result ||----------|| 1 |+----------+

Du kan også bruke et enkelt jokertegn et sted midt i mønsteret:

SELECT PATINDEX('B%r.', 'Bob likes beer.') AS Result;

Resultat:

+----------+| Result ||----------|| 1 |+----------+

I dette tilfellet fikk vi en kamp fordi starten og slutten av strengen matchet starten og slutten på mønsteret. Selvfølgelig matchet midten av strengen også midten av mønsteret, fordi alle andre tegn er dekket av prosenttegnet.

Eksempel 3 – Understrek Jokertegn

her er et annet eksempel der vi introduserer et annet jokertegn:

SELECT PATINDEX('B_er', 'Beer') AS Result;

Resultat:

+----------+| Result ||----------|| 1 |+----------+

understrek (_) som er et jokertegn for et enkelt tegn. Derfor vil det bare matche hvis det er nøyaktig ett tegn i den posisjonen.

selvfølgelig kan mønsteret ovenfor matche mange forskjellige strenger. For eksempel:

SELECT PATINDEX('B_er', 'Beer') AS 'Beer', PATINDEX('B_er', 'Bier') AS 'Bier', PATINDEX('B_er', 'Baer') AS 'Baer', PATINDEX('B_er', 'B er') AS 'B er';

Resultat:

+--------+--------+--------+--------+| Beer | Bier | Baer | B er ||--------+--------+--------+--------|| 1 | 1 | 1 | 1 |+--------+--------+--------+--------+

Eksempel 4 – Sammenligning av _ og % Jokertegn

dette eksemplet viser forskjellen mellom _ og % jokertegn.

SELECT PATINDEX('B%r', 'Beer') AS '%', PATINDEX('B_r', 'Beer') AS '_', PATINDEX('B__r', 'Beer') AS '__';

Resultat:

+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 1 |+-----+-----+------+

understrekingen samsvarer bare når det er nøyaktig ett tegn i den posisjonen. For å matche to tegn må vi bruke to understreker.

prosenttegnet derimot, samsvarer med et hvilket som helst antall tegn, inkludert null, som vist i følgende eksempel:

SELECT PATINDEX('Bee%r', 'Beer') AS '%', PATINDEX('Bee_r', 'Beer') AS '_', PATINDEX('Bee__r', 'Beer') AS '__';

Resultat:

+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 0 |+-----+-----+------+

Eksempel 5 – Et Databaseeksempel

her er et eksempel på bruk av denne funksjonen i en databasespørring:

USE Music;SELECT AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM AlbumsWHERE PATINDEX('%the%', AlbumName) > 0;

Resultat:

+-------------------------+-----------------+| AlbumName | Pattern Index ||-------------------------+-----------------|| Singing Down the Lane | 14 || Ziltoid the Omniscient | 9 || No Prayer for the Dying | 15 || The Sixteen Men of Tain | 1 |+-------------------------+-----------------+

i dette tilfellet Bruker jeg WHERE klausulen for å returnere bare de albumene som Faktisk Samsvarer, Sammen Med Deres PATINDEX() resultat. Hvis jeg droppetWHERE klausulen, ville alle album har blitt returnert, uavhengig av om de matchet eller ikke.

for de som ikke stemte overens, ville PATINDEX() resultatet være null.

USE Music;SELECT TOP(10) AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM Albums;

Resultat:

+-------------------------+-----------------+| AlbumName | Pattern Index ||-------------------------+-----------------|| Powerslave | 0 || Powerage | 0 || Singing Down the Lane | 14 || Ziltoid the Omniscient | 9 || Casualties of Cool | 0 || Epicloud | 0 || Somewhere in Time | 0 || Piece of Mind | 0 || Killers | 0 || No Prayer for the Dying | 15 |+-------------------------+-----------------+

Eksempel 6 – Bare Første Forekomst

som nevnt,PATINDEX() returnerer bare den første forekomsten av mønsteret i strengen.

SELECT PATINDEX('%and%', 'Bob and beer and popcorn.') AS Result;

Resultat:

+----------+| Result ||----------|| 5 |+----------+

CHARINDEX ()-Funksjonen

T-SQL CHARINDEX() – funksjonen ligner på PATINDEX()div>. Det er imidlertid noen forskjeller mellom de to. Spesielt godtarPATINDEX() jokertegn, men ikke en startposisjon. CHARINDEX() aksepterer derimot en startposisjon, men ikke jokertegn.

Related Posts

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *