sql - solo - ¿Cómo extraer el grupo de la expresión regular en Oracle?
regexp_replace oracle (2)
Recibí esta consulta y quiero extraer el valor entre los corchetes.
select de_desc, regexp_substr(de_desc, ''/[(.+)/]'', 1)
from DATABASE
where col_name like ''[%]'';
Sin embargo, me da el valor con los corchetes como "[TEST]". Solo quiero "TEST". ¿Cómo modifico la consulta para obtenerla?
Debe hacer una sustitución y usar un patrón de expresión regular que coincida con toda la cadena.
select regexp_replace(de_desc, ''.*/[(.+)/].*'', ''/1'') from DATABASE;
El tercer parámetro de la función REGEXP_SUBSTR indica la posición en la cadena de destino ( de_desc
en su ejemplo) donde desea iniciar la búsqueda. Suponiendo que se encuentra una coincidencia en la porción dada de la cadena, no afecta lo que se devuelve.
En Oracle 11g, hay un sexto parámetro para la función, que creo que es lo que está tratando de usar, que indica el grupo de captura que desea devolver. Un ejemplo de uso adecuado sería:
SELECT regexp_substr(''abc[def]ghi'', ''/[(.+)/]'', 1,1,NULL,1) from dual;
Donde el último parámetro 1
indique el número del grupo de captura que desea devolver.
10g no parece tener esta opción, pero en su caso puede lograr el mismo resultado con:
select substr( match, 2, length(match)-2 ) from (
SELECT regexp_substr(''abc[def]ghi'', ''/[(.+)/]'') match FROM dual
);
ya que sabes que un partido tendrá exactamente un personaje en exceso al principio y al final. (Alternativamente, puede usar RTRIM y LTRIM para eliminar corchetes de ambos extremos del resultado).