sql >> Databasteknik >  >> RDS >> Mysql

Välja en del av ett fält med ett regex

Detta svar är föråldrat. MySql har bättre stöd för regex.

Nej, tråkigt att säga att MySQL inte har ett sätt att tillämpa ett regex på en kolumns innehåll i en SELECT-sats, bara en WHERE-sats.

Men du kan använda vanliga (icke-regex) strängmanipuleringsfunktioner för att göra detta. Om kolumnen som innehåller din et-tecken-separerade parametersträng heter url , kan du få id-numret med detta fina stränguttryck, som hittar ditt id-nummer.

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

Så om du vill ha en lista med id värden från url kolumner i table1 , kan du använda denna SELECT fråga.

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 använder detta regexp-sökfunktionen för att hitta rätt rader.

Det är inget snabbt med detta. Regexp-matchning kan inte utnyttja ett MySQL-index. Om du kan välja att ladda ditt bord med id-kolumnen förextraherad kommer du att bli mycket bättre av att söka när ditt bord blir stort.



  1. Hur man infogar data i flera tabeller med inblandade främmande nyckelberoenden (MySQL)

  2. Hur man skapar en fråga i Drupal 8

  3. Vad stöder Tabell inte optimize, men återskapa + analysera istället betyder?

  4. php echo fungerar inte