Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Problema com Oracle regex


O * operador é 'ganancioso' por padrão . Você está permitindo quaisquer caracteres entre distinct e ) , em qualquer quantidade. e incluindo o primeiro ) em si.

Como sugeriu EatÅPeach, você pode torná-lo não-ganancioso com ? :

Então aqui, com .*? em vez de .* :
select regexp_substr(
  'select count(distinct empno), count(distinct deptno) from emp',
    'count\(distinct.*?\)')
from dual;

Ou você pode especificar que deve ser qualquer caractere exceto ) com [^)]* em vez de .* .
select regexp_substr(
  'select count(distinct empno), count(distinct deptno) from emp',
    'count\(distinct[^)]*\)')
from dual;