ho justed fronte problema molto simile ... MA RegExp_Count non poteva risolvere esso. Quante volte string '16, 124,3,3,1,0, 'contiene', 3, '? Come si vede 2 volte, ma RegExp_Count Restituzioni solo 1. La stessa cosa è con '' bbaaaacc' e quando si cerca in essa 'AA' - dovrebbe essere 3 volte e restituisce RegExp_Count solo 2.
select REGEXP_COUNT('336,14,3,3,11,0,' , ',3,') from dual;
select REGEXP_COUNT('bbaaaacc' , 'aa') from dual;
ho perso un po' di tempo per cercare soluzioni sul web. Impossibile trovare ... così ho scritto la mia funzione che restituisce il vero numero di occurance. Spero che sarà utile.
CREATE OR REPLACE FUNCTION EXPRESSION_COUNT(pEXPRESSION VARCHAR2, pPHRASE VARCHAR2) RETURN NUMBER AS
vRET NUMBER := 0;
vPHRASE_LENGTH NUMBER := 0;
vCOUNTER NUMBER := 0;
vEXPRESSION VARCHAR2(4000);
vTEMP VARCHAR2(4000);
BEGIN
vEXPRESSION := pEXPRESSION;
vPHRASE_LENGTH := LENGTH(pPHRASE);
LOOP
vCOUNTER := vCOUNTER + 1;
vTEMP := SUBSTR(vEXPRESSION, 1, vPHRASE_LENGTH);
IF (vTEMP = pPHRASE) THEN
vRET := vRET + 1;
END IF;
vEXPRESSION := SUBSTR(vEXPRESSION, 2, LENGTH(vEXPRESSION) - 1);
EXIT WHEN (LENGTH(vEXPRESSION) = 0) OR (vEXPRESSION IS NULL);
END LOOP;
RETURN vRET;
END;
Per quanto riguarda le prestazioni che è interessante notare trovato la soluzione 'REGEXP_COUNT' ad essere circa 5 volte più lento (più tempo di CPU che consumano) rispetto al' LUNGHEZZA-LUNGHEZZA (replace()) 'approccio. Oracle 11.2.0.4 Linux x86 64-bit –