3.3.4.7 Dopasowywanie wzorców
MySQL udostępnia standardowe dopasowywanie wzorców SQL, jak również formę dopasowywania wzorców opartą na rozszerzonych wyrażeniach regularnych, podobnych do tych używanych przez narzędzia uniksowe, takie jak vi, grep i sed.
 Dopasowywanie wzorców SQL pozwala na użycie _ do dopasowania dowolnego pojedynczego znaku oraz % do dopasowania dowolnej liczby znaków (w tym znaków zerowych). W MySQL domyślnie rozróżniana jest wielkość liter. Niektóre przykłady są pokazane tutaj. Nie używaj = lub <> podczas korzystania z wzorców SQL. Zamiast tego użyj operatorów porównania LIKE lub NOT LIKE. 
 Aby znaleźć nazwy zaczynające się od b: 
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 |+--------+--------+---------+------+------------+------------+ Aby znaleźć nazwy kończące się na fy: 
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 |+--------+--------+---------+------+------------+-------+ Aby znaleźć nazwy zawierające w: 
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 |+----------+-------+---------+------+------------+------------+ Aby znaleźć nazwy zawierające dokładnie pięć znaków, użyj pięciu wystąpień znaku wzorca _: 
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 |+-------+--------+---------+------+------------+-------+ Drugi typ dopasowywania wzorców udostępniany przez MySQL wykorzystuje rozszerzone wyrażenia regularne. Gdy testujesz dopasowanie dla tego typu wzorca, użyj funkcji REGEXP_LIKE() (lub operatorów REGEXP lub RLIKE, które są synonimami dla REGEXP_LIKE()). 
Poniższa lista opisuje niektóre cechy rozszerzonych wyrażeń regularnych:
- 
.dopasowuje dowolny pojedynczy znak.
- 
Klasa znaków pasuje do dowolnego znaku wewnątrz nawiasów. Na przykład,pasuje doa,blubc. Aby nazwać zakres znaków, należy użyć myślnika.pasuje do każdej litery, ado każdej cyfry.
- 
*dopasowuje zero lub więcej wystąpień poprzedzającej go rzeczy. Na przykładx*dopasowuje dowolną liczbę znakówx,*dopasowuje dowolną liczbę cyfr, a.*dopasowuje dowolną liczbę czegokolwiek.
- 
Dopasowanie wzorca wyrażenia regularnego powiedzie się, jeśli wzorzec pasuje w dowolnym miejscu testowanej wartości. (Różni się to od dopasowania wzorca LIKE, które powiedzie się tylko wtedy, gdy wzorzec pasuje do całej wartości).
- 
Aby zakotwiczyć wzorzec tak, że musi on pasować do początku lub końca testowanej wartości, należy użyć ^na początku lub$na końcu wzorca.
 Aby zademonstrować, jak działają rozszerzone wyrażenia regularne, pokazane wcześniej zapytania LIKE zostały tutaj przepisane na REGEXP_LIKE(). 
 Aby znaleźć nazwy zaczynające się od b, należy użyć ^ do dopasowania początku nazwy: 
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 |+--------+--------+---------+------+------------+------------+ Aby wymusić, aby porównanie wyrażeń regularnych uwzględniało wielkość liter, należy użyć kolacji uwzględniającej wielkość liter lub użyć słowa kluczowego BINARY, aby jeden z łańcuchów był łańcuchem binarnym, lub określić znak c kontroli dopasowania. Każde z tych zapytań dopasowuje tylko małe litery b na początku nazwy: 
SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b' COLLATE utf8mb4_0900_as_cs);SELECT * FROM pet WHERE REGEXP_LIKE(name, BINARY '^b');SELECT * FROM pet WHERE REGEXP_LIKE(name, '^b', 'c'); Aby znaleźć nazwy kończące się na fy, użyj $, aby dopasować koniec nazwy: 
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 |+--------+--------+---------+------+------------+-------+ Aby znaleźć nazwy zawierające w, użyj tego zapytania: 
mysql> SELECT * FROM pet WHERE REGEXP_LIKE(name, '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 |+----------+-------+---------+------+------------+------------+Ponieważ wzorzec wyrażenia regularnego pasuje, jeśli występuje w dowolnym miejscu wartości, w poprzednim zapytaniu nie jest konieczne umieszczanie symbolu wieloznacznego po obu stronach wzorca, aby dopasować go do całej wartości, co byłoby prawdą w przypadku wzorca SQL.
 Aby znaleźć nazwy zawierające dokładnie pięć znaków, użyj ^ i $, aby dopasować początek i koniec nazwy oraz pięć wystąpień . pomiędzy nimi: 
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 |+-------+--------+---------+------+------------+-------+ Mogłabyś również napisać poprzednie zapytanie, używając operatora { („repeat-n}n-times”): 
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 |+-------+--------+---------+------+------------+-------+Więcej informacji na temat składni wyrażeń regularnych znajdziesz w rozdziale 12.8.2, „Wyrażenia regularne”.
.