sql >> Database >  >> RDS >> Oracle

Probleem met Oracle-regex

De * operator is standaard 'hebzuchtig' . Je staat alle tekens toe tussen distinct en ) , in elke hoeveelheid. en inclusief de eerste ) zelf.

Zoals EatÅPeach suggereerde, kun je het niet-hebzuchtig maken met ? :

Dus hier, met .*? in plaats van .* :

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

Of u kunt specificeren dat het een willekeurig teken moet zijn, behalve ) met [^)]* in plaats van .* .

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


  1. Moet records in de orakeltabel invoegen voor planning

  2. Hoe een tekenreeks na een specifiek teken in SQL Server te splitsen en deze waarde bij te werken naar een specifieke kolom?

  3. Geheugenlek in PHP bij het ophalen van grote dataset uit MySQL

  4. Query om alle records te krijgen totdat de som van de kolom kleiner is dan of gelijk is aan een waarde