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

Valg af en del af et felt med et regex

Dette svar er forældet. MySql har bedre regex-understøttelse.

Nej, trist at sige, at MySQL ikke har en måde at anvende et regex på en kolonnes indhold i en SELECT-sætning, kun en WHERE-sætning.

Men du kan bruge almindelige (ikke-regex) strengmanipulationsfunktioner til at gøre dette. Hvis kolonnen, der indeholder din og-sand-separerede parameterstreng, hedder url , kan du få id-nummeret med dette fine streng-udtryk, som finder dit id-nummer.

  CAST(RIGHT(url, LENGTH(url) - 3 - LOCATE('&id=', url)) AS SIGNED INTEGER)

Så hvis du vil have en liste over id værdier fra url kolonner i table1 , kan du bruge denne SELECT forespørgsel.

SELECT CAST(RIGHT(url, LENGTH(url) - 3 - 
                       LOCATE('&id=', url)) AS SIGNED INTEGER) AS id
  FROM table1
 WHERE url REGEXP '&id=[0-9]+'

Som du kan se, bruger dette regexp-søgefunktionen til at finde de relevante rækker.

Der er ikke noget hurtigt ved dette. Regexp-matching kan ikke udnytte et MySQL-indeks. Hvis du har valget mellem at indlæse dit bord med id-kolonnen præ-ekstraheret, vil du være meget bedre stillet at søge, når din tabel bliver stor.



  1. mysql_real_escape mere end én gang

  2. Kan ikke oprette testfil lavere test start server mysql

  3. Kan ikke installere MySQL Server 8.0.17 med fejlen "Handlingen 'Installer' for produktet 'MySQL Server 8.0.17' mislykkedes"

  4. Sådan kommenterer du i SQL