sql >> Databasteknik >  >> RDS >> Oracle

Problem med Oracles regex

* operatorn är "girig" som standard . Du tillåter alla tecken mellan distinkt och ) , i vilken mängd som helst. och inklusive den första ) sig själv.

Som EatÅPeach föreslog, kan du göra det icke-girigt med ? :

Så här, med .*? istället för .* :

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

Eller så kan du ange att det ska vara vilket tecken som helst förutom ) med [^)]* istället för .* .

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


  1. Hur man gör en JOIN från två olika kolumner till samma kolumn på en separat tabell

  2. Utforska onlineindexoperationer på partitionsnivå i SQL Server 2014 CTP1

  3. JPA:hur behåller jag en sträng i ett databasfält, skriv MYSQL Text

  4. Vad är MariaDB Enterprise och hur man hanterar det med ClusterControl?