sql >> Database >  >> RDS >> Mysql

Een deel van een veld selecteren met een regex

Dit antwoord is verouderd. MySql heeft betere regex-ondersteuning.

Nee, helaas heeft MySQL geen manier om een ​​regex toe te passen op de inhoud van een kolom in een SELECT-component, alleen een WHERE-component.

Maar u kunt hiervoor gewone (niet-regex) tekenreeksmanipulatiefuncties gebruiken. Als de kolom met uw door ampersand gescheiden parameterreeks de naam url heeft , kunt u het id-nummer krijgen met deze fijne tekenreeksuitdrukking, die uw id-nummer vindt.

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

Dus, als je een lijst wilt met id waarden uit de url kolommen van table1 , zou je deze SELECT . kunnen gebruiken vraag.

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

Zoals je kunt zien, gebruikt dit de regexp-zoekfunctie om de juiste rijen te vinden.

Hier is niets snels aan. Regexp-overeenkomsten kunnen geen MySQL-index misbruiken. Als je de keuze hebt om je tabel te laden met de id-kolom voorgeëxtraheerd, kun je veel beter zoeken wanneer je tafel groot wordt.



  1. krijg een fout bij het definiëren van de gebeurtenisnaam op mysqlworkbench 5.5

  2. sql unie bestelling

  3. Waarom veroorzaakt deze MySQL-trigger een stack-overflow?

  4. TRUNC(datum) Functie in Oracle