sql >> Databáze >  >> RDS >> Mysql

3 způsoby, jak zjistit, zda se řetězec shoduje s regulárním výrazem v MySQL

MySQL má řadu funkcí a operátorů, které nám umožňují provádět operace pomocí regulárních výrazů (regex). Tento článek představuje dva operátory a jednu funkci, které nám umožňují zjistit, zda řetězec odpovídá regulárnímu výrazu určenému daným vzorem.

Tyto funkce a operátory regulárních výrazů jsou:

  • REGEXP_LIKE()
  • REGEXP
  • RLIKE

Všechny jsou v zásadě ekvivalentní, protože oba operátory (druhé dva) jsou synonyma funkce (první). V každém případě níže můžete vidět příklady všech tří v akci.

REGEXP_LIKE() Funkce

Nejprve se podívejme na funkci. Zde je příklad spuštění vyhledávání regulárních výrazů pomocí REGEXP_LIKE() funkce:

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

Výsledek:

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

První řetězec odpovídá (protože začíná C ), takže výsledek je 1 . Druhý řetězec se neshoduje, takže výsledek je 0 .

Tato funkce však může být mnohem užitečnější než pouhé vrácení 1 nebo 0 . Může být například přidán do WHERE klauzule při dotazu na databázi. V tomto případě můžeme získat seznam řádků, které obsahují shodu se vzorem.

Zde je příklad:

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

Výsledek:

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

Zde je úplná tabulka:

SELECT AlbumId, AlbumName
FROM Albums;

Výsledek:

+---------+--------------------------+
| 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 Operátor

Zde je návod, jak provést stejnou věc pomocí REGEXP operátor:

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

Výsledek:

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

A příklad databáze:

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

Výsledek:

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

Můžete také použít NOT REGEXP vrátíte opačný výsledek.

RLIKE Operátor

A zde je to pomocí RLIKE :

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

Výsledek:

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

A příklad databáze:

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

Výsledek:

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

V tomto případě jsem jednoduše vyměnil REGEXP pro RLIKE a zbytek kódu nechal na pokoji.

Můžete také použít NOT RLIKE vrátíte opačný výsledek.

Další funkce REGEX

MySQL také obsahuje několik dalších funkcí a operátorů regulárních výrazů. Tři z nich jsou uvedeny níže. Technicky můžete první dva použít také k „detekci“, zda řetězec odpovídá vzoru regulárního výrazu (v takovém případě by tento článek měl mít název „5 způsobů, jak zjistit, zda řetězec odpovídá regulárnímu výrazu v MySQL“ namísto pouhého „ 3 způsoby…”).

Každopádně zde jsou další tři funkce regulárního výrazu:

  • Můžete použít REGEXP_INSTR() funkce, která vrátí počáteční index podřetězce, který odpovídá vzoru regulárního výrazu.
  • REGEXP_SUBSTR() funkce vrací podřetězec, který odpovídá danému vzoru regulárního výrazu.
  • A REGEXP_REPLACE() funkce nahradí výskyty podřetězce v řetězci, který odpovídá danému vzoru regulárního výrazu.

  1. Klauzule ORDER BY je neplatná v pohledech, vložených funkcích, odvozených tabulkách, poddotazech a běžných tabulkových výrazech.

  2. Jak vyjádřit svou hodnotu jako DBA finančním manažerům

  3. Filtr na výstupní klauzuli sql

  4. Chyba při mapování postgresových polí v Spring JPA