sql >> Base de Datos >  >> RDS >> Mysql

Seleccionar parte de un campo con una expresión regular

Esta respuesta está obsoleta. MySql tiene mejor compatibilidad con expresiones regulares.

No, es triste decir que MySQL no tiene una forma de aplicar una expresión regular al contenido de una columna en una cláusula SELECT, solo una cláusula WHERE.

Pero puede usar funciones de manipulación de cadenas ordinarias (no expresiones regulares) para hacer esto. Si la columna que contiene la cadena de parámetros separados por ampersand se llama url , puede obtener el número de identificación con esta expresión de cadena fina, que encuentra su número de identificación.

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

Entonces, si quieres una lista de id valores de la url columnas de table1 , podrías usar este SELECT consulta.

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

Como puede ver, esto usa la función de búsqueda de expresiones regulares para ubicar las filas apropiadas.

No hay nada rápido en esto. La coincidencia de expresiones regulares no puede explotar un índice MySQL. Si tiene la opción de cargar su tabla con la columna id extraída previamente, será mucho mejor buscar cuando su tabla crezca.