Az SQL Serverben használhatja a T-SQL PATINDEX()
függvényt egy karakterláncon belüli minta megtalálásához. Pontosabban, a függvény csak a minta első előfordulását adja vissza a karakterláncon belül.
a függvény két argumentumot fogad el; a mintát és a karakterláncot.
helyettesítő karaktereket használhat a mintán belül.
szintaxis
a szintaxis így megy:
PATINDEX ( '%pattern%' , expression )
ahol a minta egy karakter kifejezés, amely tartalmazza a keresendő szekvenciát, a kifejezés pedig a keresendő kifejezés.
1.példa – alapvető használat
Íme egy példa arra, hogyan működik:
SELECT PATINDEX('%eer%', 'Bob likes beer.') AS Result;
eredmény:
+----------+| Result ||----------|| 12 |+----------+
a százalékos jel (%
) egy helyettesítő karakter, amely a bármilyen karakterlánc nulla vagy több karakter.
2. példa-nincs mérkőzés
itt van, mi történik, ha nem tartalmazza a helyettesítő karaktereket:
SELECT PATINDEX('eer', 'Bob likes beer.') AS Result;
Eredmények:
+----------+| Result ||----------|| 0 |+----------+
Bár, ha a teljes karakterlánc megegyezik a minta nélkül helyettesítő karakterek, kapsz egy meccs:
SELECT PATINDEX('Bob', 'Bob') AS Result;
az Eredmény:
+----------+| Result ||----------|| 1 |+----------+
Azonban nem lesz meccs, ha a karakterlánc több karaktereket:
SELECT PATINDEX('Bob', 'Bob likes beer.') AS Result;
Eredmények:
+----------+| Result ||----------|| 0 |+----------+
ebben Az esetben jól jönne egy egységes helyettesítő:
SELECT PATINDEX('Bob%', 'Bob likes beer.') AS Result;
Eredmény:
+----------+| Result ||----------|| 1 |+----------+
a minta közepén is használhat egyetlen helyettesítő kártyát:
SELECT PATINDEX('B%r.', 'Bob likes beer.') AS Result;
eredmény:
+----------+| Result ||----------|| 1 |+----------+
ebben az esetben egyezést kaptunk, mert a karakterlánc eleje és vége megegyezett a kezdőbetűvel és a minta vége. Természetesen a karakterlánc közepe is megegyezett a minta közepével, mert az összes többi karaktert a százalékos jel fedezi.
3. példa-az aláhúzott helyettesítő
itt van egy másik példa, ahol bemutatunk egy másik helyettesítő karaktert:
SELECT PATINDEX('B_er', 'Beer') AS Result;
eredmény:
+----------+| Result ||----------|| 1 |+----------+
az aláhúzás (_
), amely bármely karakter helyettesítő karaktere. Ezért csak akkor egyezik meg, ha pontosan egy karakter van ebben a helyzetben.
természetesen a fenti minta sok különböző karakterlánchoz illeszkedik. Például:
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';
eredmény:
+--------+--------+--------+--------+| Beer | Bier | Baer | B er ||--------+--------+--------+--------|| 1 | 1 | 1 | 1 |+--------+--------+--------+--------+
4.példa – A _ és % helyettesítő karakterek összehasonlítása
Ez a példa bemutatja a _
és %
helyettesítő karakterek közötti különbséget.
SELECT PATINDEX('B%r', 'Beer') AS '%', PATINDEX('B_r', 'Beer') AS '_', PATINDEX('B__r', 'Beer') AS '__';
eredmény:
+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 1 |+-----+-----+------+
az aláhúzás csak akkor egyezik meg, ha pontosan egy karakter van ebben a helyzetben. Ahhoz, hogy megfeleljen a két karakter, meg kell használni két aláhúzás.
a százalékos jel viszont megfelel tetszőleges számú karakternek, beleértve a nullát is, amint az a következő példában látható:
SELECT PATINDEX('Bee%r', 'Beer') AS '%', PATINDEX('Bee_r', 'Beer') AS '_', PATINDEX('Bee__r', 'Beer') AS '__';
Eredmények:
+-----+-----+------+| % | _ | __ ||-----+-----+------|| 1 | 0 | 0 |+-----+-----+------+
5. Példa Egy Adatbázis Példa
Itt egy példa ennek a funkciónak a használatával az adatbázis lekérdezés:
USE Music;SELECT AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM AlbumsWHERE PATINDEX('%the%', AlbumName) > 0;
az Eredmény:
+-------------------------+-----------------+| AlbumName | Pattern Index ||-------------------------+-----------------|| Singing Down the Lane | 14 || Ziltoid the Omniscient | 9 || No Prayer for the Dying | 15 || The Sixteen Men of Tain | 1 |+-------------------------+-----------------+
ebben Az esetben használja a WHERE
záradék vissza csak azok az albumok, hogy valójában mérkőzés, együtt a PATINDEX()
eredmény. Ha elejtettem a WHERE
záradékot, az összes album vissza lett volna adva, függetlenül attól, hogy egyeztek-e vagy sem.
azok számára, akik nem egyeztek, a PATINDEX()
eredmény nulla lenne.
USE Music;SELECT TOP(10) AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index'FROM Albums;
eredmény:
+-------------------------+-----------------+| 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 |+-------------------------+-----------------+
6.példa – csak az első előfordulás
mint említettük, PATINDEX()
csak a karakterláncon belüli minta első előfordulását adja vissza.
SELECT PATINDEX('%and%', 'Bob and beer and popcorn.') AS Result;
eredmény:
+----------+| Result ||----------|| 5 |+----------+
A CHARINDEX() függvény
A T-SQL CHARINDEX()
függvény hasonló a PATINDEX()
. Vannak azonban különbségek a kettő között. Különösen aPATINDEX()
elfogadja a helyettesítő karaktereket, de nem kiindulási pozíciót. CHARINDEX()
másrészt elfogadja a kiindulási pozíciót, de nem helyettesítő karaktereket.