Mysql
 sql >> Baza danych >  >> RDS >> Mysql

3 sposoby na wykrycie, czy ciąg pasuje do wyrażenia regularnego w MySQL

MySQL posiada szereg funkcji i operatorów, które pozwalają nam wykonywać operacje za pomocą wyrażeń regularnych (regex). Ten artykuł przedstawia dwa operatory i jedną funkcję, które pozwalają nam dowiedzieć się, czy ciąg znaków pasuje do wyrażenia regularnego określonego przez dany wzorzec.

Te funkcje i operatory wyrażeń regularnych to:

  • REGEXP_LIKE()
  • REGEXP
  • RLIKE

Wszystkie są w zasadzie równoważne, ponieważ operatory (dwa drugie) są synonimami funkcji (pierwszy). W każdym razie możesz zobaczyć przykłady wszystkich trzech w akcji poniżej.

REGEXP_LIKE() Funkcja

Najpierw spójrzmy na funkcję. Oto przykład uruchomienia wyszukiwania wyrażeń regularnych za pomocą REGEXP_LIKE() funkcja:

SELECT 
  REGEXP_LIKE('Car', '^C') AS 'Match',
  REGEXP_LIKE('Bar', '^C') AS 'No Match';

Wynik:

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

Pierwszy ciąg pasuje (ponieważ zaczyna się od C ), więc wynik to 1 . Drugi ciąg nie pasuje, więc wynik to 0 .

Jednak ta funkcja może być znacznie bardziej użyteczna niż zwykłe zwracanie 1 lub 0 . Na przykład można go dodać do WHERE klauzula podczas odpytywania bazy danych. W takim przypadku możemy otrzymać listę wierszy zawierających dopasowanie do wzorca.

Oto przykład:

SELECT AlbumId, AlbumName
FROM Albums
WHERE REGEXP_LIKE(AlbumName, '^Power');

Wynik:

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

Oto pełna tabela:

SELECT AlbumId, AlbumName
FROM Albums;

Wynik:

+---------+--------------------------+
| AlbumId | AlbumName                |
+---------+--------------------------+
|       1 | Powerslave               |
|       2 | Powerage                 |
|       3 | Singing Down the Lane    |
|       4 | Ziltoid the Omniscient   |
|       5 | Casualties of Cool       |
|       6 | Epicloud                 |
|       7 | Somewhere in Time        |
|       8 | Piece of Mind            |
|       9 | Killers                  |
|      10 | No Prayer for the Dying  |
|      11 | No Sound Without Silence |
|      12 | Big Swing Face           |
|      13 | Blue Night               |
|      14 | Eternity                 |
|      15 | Scandinavia              |
|      16 | Long Lost Suitcase       |
|      17 | Praise and Blame         |
|      18 | Along Came Jones         |
|      19 | All Night Wrong          |
|      20 | The Sixteen Men of Tain  |
+---------+--------------------------+

REGEXP Operator

Oto jak zrobić to samo za pomocą REGEXP operator:

SELECT 
  'Car' REGEXP '^C' AS 'Match',
  'Bar' REGEXP '^C' AS 'No Match';

Wynik:

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

I przykład bazy danych:

SELECT AlbumId, AlbumName
FROM Albums
WHERE AlbumName REGEXP '^Power';

Wynik:

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

Możesz także użyć NOT REGEXP aby zwrócić odwrotny wynik.

RLIKE Operator

A tutaj używa RLIKE :

SELECT 
  'Car' RLIKE '^C' AS 'Match',
  'Bar' RLIKE '^C' AS 'No Match';

Wynik:

+-------+----------+
| Match | No Match |
+-------+----------+
|     1 |        0 |
+-------+----------+

I przykład bazy danych:

SELECT AlbumId, AlbumName
FROM Albums
WHERE AlbumName RLIKE '^Power';

Wynik:

+---------+------------+
| AlbumId | AlbumName  |
+---------+------------+
|       1 | Powerslave |
|       2 | Powerage   |
+---------+------------+

W tym przypadku po prostu zamieniłem REGEXP dla RLIKE i zostawił resztę kodu w spokoju.

Możesz także użyć NOT RLIKE aby zwrócić odwrotny wynik.

Więcej funkcji REGEX

MySQL zawiera również kilka innych funkcji i operatorów wyrażeń regularnych. Poniżej wymieniono trzy z nich. Technicznie rzecz biorąc, możesz również użyć pierwszych dwóch, aby „wykryć”, czy ciąg pasuje do wzorca wyrażenia regularnego (w takim przypadku może ten artykuł powinien być zatytułowany „5 sposobów wykrywania, czy ciąg pasuje do wyrażenia regularnego w MySQL” zamiast po prostu „ 3 sposoby…”).

W każdym razie, oto jeszcze trzy funkcje wyrażeń regularnych:

  • Możesz użyć REGEXP_INSTR() funkcja zwracająca początkowy indeks podłańcucha, który pasuje do wzorca wyrażenia regularnego.
  • REGEXP_SUBSTR() funkcja zwraca podciąg pasujący do podanego wzorca wyrażenia regularnego.
  • I REGEXP_REPLACE() funkcja zastępuje wystąpienia podciągu w ciągu, który pasuje do podanego wzorca wyrażenia regularnego.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak stworzyć bezserwerowe API GraphQL dla MySQL, Postgres i Aurora?

  2. Jak upewnić się, że Twoja baza danych MySQL jest zabezpieczona?

  3. Instalacja MySQL

  4. Przyczyny błędu MySQL 2014 Nie można wykonać zapytań, gdy inne niebuforowane zapytania są aktywne

  5. Jak przechowywać GUID w tabelach MySQL?