Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Auswählen eines Teils eines Felds mit einer Regex

Diese Antwort ist veraltet. MySql hat eine bessere Regex-Unterstützung.

Nein, leider hat MySQL keine Möglichkeit, eine Regex auf den Inhalt einer Spalte in einer SELECT-Klausel anzuwenden, sondern nur eine WHERE-Klausel.

Aber Sie können dazu gewöhnliche (nicht-regex) String-Manipulationsfunktionen verwenden. Wenn die Spalte, die Ihre durch kaufmännisches Und-Zeichen getrennte Parameterzeichenfolge enthält, den Namen url trägt , können Sie die ID-Nummer mit diesem feinen Zeichenfolgenausdruck erhalten, der Ihre ID-Nummer findet.

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

Also, wenn Sie eine Liste von id wollen Werte aus der url Spalten von table1 , könnten Sie dieses SELECT verwenden Abfrage.

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

Wie Sie sehen können, verwendet dies die Regexp-Suchfunktion, um die entsprechenden Zeilen zu finden.

Daran ist nichts schnelles. Der Regexp-Abgleich kann einen MySQL-Index nicht ausnutzen. Wenn Sie die Möglichkeit haben, Ihre Tabelle mit vorextrahierter ID-Spalte zu laden, sind Sie bei der Suche viel besser dran, wenn Ihre Tabelle groß wird.