Por lo que puedo decir, MySQL no admite la recuperación del valor de un grupo de captura de una coincidencia de expresiones regulares. He encontrado extensiones del lado del servidor (lib_mysqludf_preg) que agregarían esta funcionalidad pero no podré instalar esta extensión en mi entorno.Simulación de grupos de captura de expresiones regulares en mysql
Por lo tanto, estoy buscando una manera de simular la captura de una parte de una coincidencia de expresiones regulares como una columna en una consulta SQL.
Mis datos se parece a la siguiente (y no puedo cambiar el formato de los datos en el servidor):
+-----------------------------+
| Version |
+-----------------------------+
| 1.2.3.4 |
| 10.20.30.40 |
| Obsidian-1.2.3.4 |
| Obsidian-11.21.31.41 |
| custom\Obsidian-11.21.31.41 |
| custom\11.21.31.41 |
+-----------------------------+
Busco para capturar cada uno de los 4 últimos dígitos de cada fila. Los dígitos son siempre la última parte del valor y siempre están separados por puntos. La siguiente expresión regular sería el fósforo todos los valores que desee:
.*[[:digit:]]+\\.[[:digit:]]+\\.[[:digit:]]+\\.[[:digit:]]+$
El resultado que estoy esperando es una combinación de funciones para capturar cada dígito como una columna de modo que pueda utilizar el dígito en la cláusula where de mi consulta, así como poder recuperar el número de versión.
SELECT
function1(...) as version1,
function2(...) as version2,
function3(...) as version3,
function4(...) as version4
FROM Version
WHERE version1 > 5;
¿Por qué no simplemente hacer esto en un lenguaje de programación de su elección? – Qtax
Al menos puede obtener el último número fácilmente con 'SUBSTRING_INDEX (ver, '.', -1) como versión4'. Los otros son posibles de meterse con [funciones de cadena de MySQL] (http://dev.mysql.com/doc/refman/5.5/en/string-functions.html). No sé si hay una forma mejor sin instalar extensiones. – Qtax