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

Selezione di parte di un campo con una regex

Questa risposta è obsoleta. MySql ha un migliore supporto per le espressioni regolari.

No, è triste dire che MySQL non ha un modo per applicare una regex al contenuto di una colonna in una clausola SELECT, solo una clausola WHERE.

Ma puoi usare le normali funzioni di manipolazione delle stringhe (non regex) per farlo. Se la colonna contenente la stringa di parametro separata dalla e commerciale è denominata url , puoi ottenere il numero ID con questa espressione di stringa fine, che trova il tuo numero ID.

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

Quindi, se vuoi un elenco di id valori dall'url colonne di table1 , puoi usare questo SELECT interrogazione.

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

Come puoi vedere, questo utilizza la funzione di ricerca regexp per individuare le righe appropriate.

Non c'è niente di veloce in questo. La corrispondenza Regexp non può sfruttare un indice MySQL. Se hai la possibilità di caricare la tua tabella con la colonna id pre-estratta, sarà molto meglio cercare quando la tua tabella diventa grande.