– tietokannassa.Opas

SQL Server-palvelussa voit käyttää T-SQL PATINDEX() – funktiota kuvion löytämiseksi merkkijonon sisällä. Erityisesti funktio palauttaa vain kuvion ensimmäisen esiintymisen merkkijonon sisällä.

funktio hyväksyy kaksi argumenttia; kuvion ja merkkijonon.

voit käyttää yleismerkkejä kuvion sisällä.

syntaksi

syntaksi menee näin:

PATINDEX ( '%pattern%' , expression )

missä kuvio on merkkilauseke, joka sisältää löydettävän sekvenssin ja lauseke on etsittävä lauseke.

Esimerkki 1 – peruskäyttö

tässä esimerkki siitä, miten se toimii:

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

tulos:

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

prosenttimerkki (%) on jokerimerkki, joka edustaa mitä tahansa merkkijono nolla tai enemmän merkkejä.

Esimerkki 2 – ei osumaa

näin käy, kun emme ota mukaan jokerimerkkejä:

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

tulos:

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

vaikka, Jos koko merkkijono vastaa kuviota ilman jokereita, saat ottelun:

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

tulos:

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

ei kuitenkaan saa osumaa, jos merkkijono sisältää enemmän merkkejä:

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

tulos:

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

jolloin voisi käyttää yhtä jokerimerkkiä:

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

tulos:

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

voit käyttää myös yhtä jokerimerkkiä jossain kuvion keskellä:

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

tulos:

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

tässä tapauksessa saimme ottelun, koska alku ja merkkijonon loppu täsmäsivät alun kanssa ja kaavan loppu. Merkkijonon keskikohta sopi tietysti myös kuvion keskikohtaan, sillä prosenttimerkki kattaa kaikki muut merkit.

esimerkki 3-alleviivattu jokerimerkki

Tässä toinen esimerkki, jossa otetaan käyttöön toinen jokerimerkki:

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

tulos:

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

alaviiva (_), joka on jokerimerkki mille tahansa yksittäiselle merkille. Siksi se täsmää vain, jos siinä asennossa on tasan yksi hahmo.

yllä oleva kuvio saattoi tietysti sopia moniin eri kieliin. Esimerkiksi:

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';

tulos:

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

esimerkki 4 – vertaamalla _ ja % jokerimerkkejä

Tämä esimerkki osoittaa eron _ ja % jokerimerkkejä.

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

tulos:

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

alaviiva osuu vain silloin, kun kyseisessä asennossa on tasan yksi merkki. Kahden merkin vastapainoksi on käytettävä kahta alaviivaa.

prosenttimerkki sen sijaan vastaa mitä tahansa merkkien määrää, mukaan lukien nolla, kuten seuraavassa esimerkissä:

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

tulos:

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

esimerkki 5 – Tietokantaesimerkki

tässä esimerkki tämän funktion käytöstä tietokantakyselyssä:

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

tulos:

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

tässä tapauksessa käytän WHERE lauseketta palauttaakseni vain ne albumit, jotka oikeasti täsmäävät, sekä niiden PATINDEX() tuloksen. Jos olisin pudottanut WHERE – lausekkeen, kaikki albumit olisi palautettu riippumatta siitä, sopivatko ne yhteen vai eivät.

niille, jotka eivät vastanneet, PATINDEX() tulos olisi nolla.

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

tulos:

+-------------------------+-----------------+| 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 |+-------------------------+-----------------+

esimerkki 6 – vain ensimmäinen esiintyminen

kuten mainittu, PATINDEX() palauttaa vain kuvion ensimmäisen esiintymisen merkkijonon sisällä.

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

tulos:

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

CHARINDEXIN() funktio

T-SQL CHARINDEX() funktio on samanlainen kuin PATINDEX(). Näiden kahden välillä on kuitenkin joitakin eroja. Erityisesti PATINDEX() hyväksyy jokerimerkit, mutta ei aloituspaikkaa. CHARINDEX() sen sijaan hyväksyy aloituspaikan, mutta ei jokerimerkkejä.

Related Posts

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *