Я только что столкнулся с очень похожей проблемой ... НО RegExp_Count не смог ее решить.Сколько раз строка '16, 124,3,3,1,0, 'содержит', 3, '?Как мы видим 2 раза, но RegExp_Count возвращает только 1. То же самое происходит с '' bbaaaacc ', а при просмотре' aa '- должно быть 3 раза, а RegExp_Count возвращает только 2.
select REGEXP_COUNT('336,14,3,3,11,0,' , ',3,') from dual;
select REGEXP_COUNT('bbaaaacc' , 'aa') from dual;
Я потерялнекоторое время, чтобы исследовать решение в сети.Не могу найти ... поэтому я написал свою собственную функцию, которая возвращает ИСТИННОЕ число вхождения.Надеюсь, это будет полезно.
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;