sql >> Database teknologi >  >> RDS >> Mysql

3 måder at opdage, om en streng matcher et regulært udtryk i MySQL

MySQL har en række funktioner og operatorer, der giver os mulighed for at udføre operationer ved hjælp af regulære udtryk (regex). Denne artikel præsenterer to operatorer og en funktion, der gør det muligt for os at finde ud af, om en streng matcher et regulært udtryk specificeret af et givet mønster.

Disse regulære udtryksfunktioner og operatorer er:

  • REGEXP_LIKE()
  • REGEXP
  • RLIKE

Disse er alle grundlæggende ækvivalente, da operatorerne (de to andre) begge er synonymer for funktionen (den første). Under alle omstændigheder kan du se eksempler på alle tre i aktion nedenfor.

REGEXP_LIKE() Funktion

Lad os først se på funktionen. Her er et eksempel på at køre en regex-søgning ved hjælp af REGEXP_LIKE() funktion:

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

Resultat:

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

Den første streng matcher (fordi den starter med C ), så resultatet er 1 . Den anden streng matcher ikke, så resultatet er 0 .

Denne funktion kan dog være meget mere nyttig end blot at returnere en 1 eller 0 . For eksempel kan det tilføjes til WHERE klausul, når du forespørger i en database. I dette tilfælde kan vi få en liste over rækker, der indeholder et match til mønsteret.

Her er et eksempel:

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

Resultat:

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

Her er den fulde tabel:

SELECT AlbumId, AlbumName
FROM Albums;

Resultat:

+---------+--------------------------+
| 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 Operatør

Sådan gør du det samme ved at bruge REGEXP operatør:

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

Resultat:

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

Og databaseeksemplet:

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

Resultat:

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

Du kan også bruge NOT REGEXP for at returnere det modsatte resultat.

RLIKE Operatør

Og her bruger den RLIKE :

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

Resultat:

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

Og databaseeksemplet:

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

Resultat:

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

I dette tilfælde byttede jeg simpelthen REGEXP for RLIKE og lod resten af ​​koden være i fred.

Du kan også bruge NOT RLIKE for at returnere det modsatte resultat.

Flere REGEX-funktioner

MySQL indeholder også et par andre regex-funktioner og -operatorer. Tre af disse er anført nedenfor. Teknisk set kan du også bruge de to første til at "detektere", om en streng matcher et regex-mønster (i så fald bør denne artikel måske have titlen "5 måder at opdage, om en streng matcher et regulært udtryk i MySQL" i stedet for blot " 3 måder...").

I hvert fald, her er tre mere regex-funktioner:

  • Du kan bruge REGEXP_INSTR() funktion for at returnere startindekset for en understreng, der matcher det regulære udtryksmønster.
  • REGEXP_SUBSTR() funktion returnerer den understreng, der matcher det givne regulære udtryksmønster.
  • Og REGEXP_REPLACE() funktion erstatter forekomster af understrengen i en streng, der matcher det givne regulære udtryksmønster.

  1. Hvordan kalder man Oracle Function i Python?

  2. Sådan undslipper du streng, mens du matcher mønster i PostgreSQL

  3. Charlotte SQL Server-brugergruppe:Rette langsomme forespørgsler. Hurtig.

  4. Sådan fungerer SQLite Min()