3.3.4.7 Mintaillesztés

A MySQL szabványos SQL-mintaillesztést, valamint egy olyan kiterjesztett reguláris kifejezéseken alapuló mintaillesztést biztosít, amelyet a Unix segédprogramok, például a vi, grep és sed használnak.

Az SQL mintaillesztés lehetővé teszi, hogy a _ segítségével bármely egyetlen karakterrel, a % segítségével pedig tetszőleges számú karakterrel (beleértve a nulla karaktereket is) egyezzen meg. A MySQL-ben az SQL-minták alapértelmezés szerint nem érzékenyek a nagy- és kisbetűkre. Néhány példa itt látható. Ne használjon = vagy <> karaktert, amikor SQL-mintákat használ. Használja helyette a LIKE vagy NOT LIKE összehasonlító operátorokat.

A b kezdetű nevek kereséséhez:

mysql> SELECT * FROM pet WHERE name LIKE 'b%';+--------+--------+---------+------+------------+------------+| name | owner | species | sex | birth | death |+--------+--------+---------+------+------------+------------+| Buffy | Harold | dog | f | 1989-05-13 | NULL || Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |+--------+--------+---------+------+------------+------------+

fy végződésű nevek kereséséhez:

mysql> SELECT * FROM pet WHERE name LIKE '%fy';+--------+--------+---------+------+------------+-------+| name | owner | species | sex | birth | death |+--------+--------+---------+------+------------+-------+| Fluffy | Harold | cat | f | 1993-02-04 | NULL || Buffy | Harold | dog | f | 1989-05-13 | NULL |+--------+--------+---------+------+------------+-------+

w-t tartalmazó nevek kereséséhez:

mysql> SELECT * FROM pet WHERE name LIKE '%w%';+----------+-------+---------+------+------------+------------+| name | owner | species | sex | birth | death |+----------+-------+---------+------+------------+------------+| Claws | Gwen | cat | m | 1994-03-17 | NULL || Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 || Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |+----------+-------+---------+------+------------+------------+

Pontosan öt karaktert tartalmazó nevek kereséséhez használja a _ mintakarakter öt példányát:

mysql> SELECT * FROM pet WHERE name LIKE '_____';+-------+--------+---------+------+------------+-------+| name | owner | species | sex | birth | death |+-------+--------+---------+------+------------+-------+| Claws | Gwen | cat | m | 1994-03-17 | NULL || Buffy | Harold | dog | f | 1989-05-13 | NULL |+-------+--------+---------+------+------------+-------+

A MySQL által biztosított másik típusú mintaillesztés a kiterjesztett reguláris kifejezéseket használja. Az ilyen típusú minták egyezésének vizsgálatakor használja a REGEXP_LIKE() függvényt (vagy a REGEXP vagy RLIKE operátorokat, amelyek a REGEXP_LIKE() szinonimái).

A következő lista a kiterjesztett reguláris kifejezések néhány jellemzőjét írja le:

  • . bármely egyetlen karakterrel megegyezik.

  • A karakterosztály bármely, zárójelben lévő karakterre illeszkedik. Például a megfelel a a, b vagy c karaktereknek. Karaktertartományok megnevezéséhez használjon kötőjelet. A bármely betűre, míg a bármely számjegyre illik.

  • * megfelel az előtte lévő dolog nulla vagy több példányának. Például a x* a x karakterek tetszőleges számával, a * a számjegyek tetszőleges számával, a .* pedig a bárminek tetszőleges számával egyezik meg.

  • A reguláris kifejezés mintaillesztése akkor sikeres, ha a minta a vizsgált értékben bárhol egyezik. (Ez eltér a LIKE mintaillesztéstől, amely csak akkor jár sikerrel, ha a minta a teljes értékre illik).

  • Egy minta lehorgonyzásához, hogy annak a vizsgált érték elejére vagy végére kell illeszkednie, használjon ^-t a minta elején vagy $-t a minta végén.

A kiterjesztett reguláris kifejezések működésének bemutatásához a korábban bemutatott LIKE lekérdezéseket itt átírjuk a REGEXP_LIKE() használatára.

A b kezdetű nevek megtalálásához használja a ^ szót a név elejére:

mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b');+--------+--------+---------+------+------------+------------+| name | owner | species | sex | birth | death |+--------+--------+---------+------+------------+------------+| Buffy | Harold | dog | f | 1989-05-13 | NULL || Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |+--------+--------+---------+------+------------+------------+

Ha a reguláris kifejezések összehasonlítását eset-érzékenységre akarja kényszeríteni, használjon eset-érzékeny összevetést, vagy használja a BINARY kulcsszót, hogy az egyik karakterláncot bináris karakterlánccá tegye, vagy adja meg a c egyezésvezérlő karaktert. Ezen lekérdezések mindegyike csak a név elején lévő b kisbetűs karakterekre illeszkedik: fy-val végződő nevek megtalálásához használja a $-t a név végére való illesztéshez:

mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, 'fy$');+--------+--------+---------+------+------------+-------+| name | owner | species | sex | birth | death |+--------+--------+---------+------+------------+-------+| Fluffy | Harold | cat | f | 1993-02-04 | NULL || Buffy | Harold | dog | f | 1989-05-13 | NULL |+--------+--------+---------+------+------------+-------+

Ha w-t tartalmazó neveket szeretne találni, használja ezt a lekérdezést:

Pontosan öt karaktert tartalmazó nevek kereséséhez használja a ^ és $ karaktereket a név elejére és végére, valamint a . öt példányát a kettő között:

mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, '^.....$');+-------+--------+---------+------+------------+-------+| name | owner | species | sex | birth | death |+-------+--------+---------+------+------------+-------+| Claws | Gwen | cat | m | 1994-03-17 | NULL || Buffy | Harold | dog | f | 1989-05-13 | NULL |+-------+--------+---------+------+------------+-------+

Az előző lekérdezést a {n} (“repeat-n-times”) operátorral is megírhatja:

mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, '^.{5}$');+-------+--------+---------+------+------------+-------+| name | owner | species | sex | birth | death |+-------+--------+---------+------+------------+-------+| Claws | Gwen | cat | m | 1994-03-17 | NULL || Buffy | Harold | dog | f | 1989-05-13 | NULL |+-------+--------+---------+------+------------+-------+

A reguláris kifejezések szintaxisáról bővebben lásd a 12.8.2. szakasz “Reguláris kifejezések” című fejezetét.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.