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.