Oracle
 sql >> Base de données >  >> RDS >> Oracle

Problème avec Oracle regex

Le * l'opérateur est 'gourmand' par défaut . Vous autorisez tous les caractères entre distinct et ) , en toute quantité. et incluant le premier ) lui-même.

Comme suggéré par EatÅPeach, vous pouvez le rendre non gourmand avec ? :

Alors ici, avec .*? au lieu de .* :

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

Ou vous pouvez spécifier qu'il doit s'agir de n'importe quel caractère sauf ) avec [^)]* au lieu de .* .

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