Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Problem mit Oracle-Regex

Der * Operator ist standardmäßig 'gierig' . Sie erlauben alle Zeichen zwischen distinct und ) , in beliebiger Menge. und einschließlich des ersten ) selbst.

Wie EatÅPeach vorgeschlagen hat, können Sie es mit ? nicht gierig machen :

Also hier, mit .*? statt .* :

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

Oder Sie können angeben, dass es sich um ein beliebiges Zeichen außer ) handeln soll mit [^)]* statt .* .

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