Du kan bruge funktionen t-HKL PATINDEX()
til at finde et mønster i en streng. Specifikt returnerer funktionen kun den første forekomst af mønsteret i strengen.
funktionen accepterer to argumenter; mønsteret og strengen.
Du kan bruge jokertegn i mønsteret.
syntaks
syntaksen går sådan her:
PATINDEX ( '%pattern%' , expression )
hvor mønster er et tegnudtryk, der indeholder den sekvens, der skal findes, og udtryk er det udtryk, der skal søges.
eksempel 1 – Grundlæggende brug
Her er et eksempel på, hvordan det virker:
SELECT PATINDEX('%eer%', 'Bob likes beer.') AS Result;
resultat:
+----------+| Result ||----------|| 12 |+----------+
procenttegnet (%
) er et jokertegn, der repræsenterer enhver streng af nul eller flere tegn.
eksempel 2 – ingen Match
Her er hvad der sker, når vi ikke inkluderer jokertegn:
SELECT PATINDEX('eer', 'Bob likes beer.') AS Result;
resultat:
+----------+| Result ||----------|| 0 |+----------+
selvom den fulde streng matcher mønsteret uden jokertegn, får du en kamp:
SELECT PATINDEX('Bob', 'Bob') AS Result;
resultat:
+----------+| Result ||----------|| 1 |+----------+
Du får dog ikke et match, hvis strengen indeholder flere tegn:
SELECT PATINDEX('Bob', 'Bob likes beer.') AS Result;
resultat:
+----------+| Result ||----------|| 0 |+----------+
i hvilket tilfælde du kunne bruge et enkelt jokertegn:
SELECT PATINDEX('Bob%', 'Bob likes beer.') AS Result;
resultat:
+----------+| Result ||----------|| 1 |+----------+
Du kan også bruge et enkelt jokertegn et eller andet sted midt i mønsteret:
SELECT PATINDEX('B%r.', 'Bob likes beer.') AS Result;
resultat:
+----------+| Result ||----------|| 1 |+----------+
i dette tilfælde fik vi en kamp, fordi starten og slutningen af strengen matchede starten og slutningen af og slutningen af mønsteret. Selvfølgelig matchede midten af strengen også midten af mønsteret, fordi alle andre tegn er dækket af procenttegnet.
eksempel 3-Understregningstegnet
Her er et andet eksempel, hvor vi introducerer et andet jokertegn:
SELECT PATINDEX('B_er', 'Beer') AS Result;
resultat:
+----------+| Result ||----------|| 1 |+----------+
understregningen (_
), som er et jokertegn for et enkelt tegn. Derfor vil det kun matche, hvis der er nøjagtigt et tegn i den position.
selvfølgelig kunne ovenstående mønster matche mange forskellige strenge. 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 af _ og % jokertegn
dette eksempel viser forskellen mellem_
og%
jokertegn.
SELECT PATINDEX('B%r', 'Beer') AS '%', PATINDEX('B_r', 'Beer') AS '_', PATINDEX('B__r', 'Beer') AS '__';
resultat:
+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 1 |+-----+-----+------+
understregningen matcher kun, når der er nøjagtigt et tegn i den position. For at matche to tegn skal vi bruge to understregninger.
procenttegn på den anden side matcher et vilkårligt antal tegn, inklusive nul, som det ses 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å at bruge denne funktion i en databaseforespørgsel:
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 tilfælde bruger jeg WHERE
klausul for kun at returnere de albums, der faktisk matcher, sammen med deres PATINDEX()
resultat. Hvis jeg droppede WHERE
klausul, ville alle albums være blevet returneret, uanset om de matchede eller ej.
for dem, der ikke matchede, ville PATINDEX()
resultatet være nul.
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 – Kun første forekomst
som nævnt PATINDEX()
returnerer kun den første forekomst af mønsteret inden for strengen.
SELECT PATINDEX('%and%', 'Bob and beer and popcorn.') AS Result;
resultat:
+----------+| Result ||----------|| 5 |+----------+
funktionen CHARINDEKS ()
funktionen t-KVL CHARINDEX()
funktionen ligner PATINDEX()
. Der er dog nogle forskelle mellem de to. IsærPATINDEX()
accepterer jokertegn, men ikke en startposition. CHARINDEX()
på den anden side accepterer en startposition, men ikke jokertegn.