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;