sql >> Base de Datos >  >> RDS >> Oracle

Problema con la expresión regular de Oracle

El * el operador es 'codicioso' por defecto . Estás permitiendo cualquier carácter entre distinct y ) , en cualquier cantidad. e incluyendo el primer ) mismo.

Como sugirió EatÅPeach, puede hacer que no sea codicioso con ? :

Así que aquí, con .*? en lugar de .* :

select regexp_substr(
  'select count(distinct empno), count(distinct deptno) from emp',
    'count\(distinct.*?\)')
from dual;

O puede especificar que debe ser cualquier carácter excepto ) con [^)]* en lugar de .* .

select regexp_substr(
  'select count(distinct empno), count(distinct deptno) from emp',
    'count\(distinct[^)]*\)')
from dual;