Oracle varchar 값에서 문자의 발생 횟수를 계산하는 방법은 무엇입니까?
문자의 발생 횟수를 카운트하려면 어떻게 해야 합니까?-
varchar2 문자열로요?
예:
select XXX('123-345-566', '-') from dual;
----------------------------------------
2
여기 있습니다.
select length('123-345-566') - length(replace('123-345-566','-',null))
from dual;
기술적으로 체크하는 문자열에 카운트하는 문자만 포함되어 있는 경우 위의 쿼리는 NULL을 반환합니다.다음 쿼리는 모든 경우에 올바른 답변을 제공합니다.
select coalesce(length('123-345-566') - length(replace('123-345-566','-',null)), length('123-345-566'), 0)
from dual;
의 마지막 0coalesce
는 빈 문자열(ORACLE에서는 길이(NULL) = NULL이므로 NULL)로 카운트하고 있는 경우를 포착합니다.
REGEXP_카운트는 다음과 같은 처리를 합니다.
select REGEXP_COUNT('123-345-566', '-') from dual;
아이디어: 대시 문자가 아닌 모든 문자를 빈 문자열로 바꿔 보십시오.그런 다음 대시가 몇 개 남았는지 세어 보십시오.
select length(regexp_replace('123-345-566', '[^-]', '')) from dual
나도 비슷한 문제에 직면했어그러나 RegExp_Count에서는 해결할 수 없었습니다.문자열 '16,124,3,3,1,0'이 ',3,3,1,0'을 포함하는 횟수는 2회이지만 RegExp_Count는 1회만 반환합니다."bbaaaac"도 마찬가지이며, "aa"를 볼 때 "aa"는 3번이고 RegExp_Count는 2번만 반환됩니다.
select REGEXP_COUNT('336,14,3,3,11,0,' , ',3,') from dual;
select REGEXP_COUNT('bbaaaacc' , 'aa') from dual;
웹에서 솔루션을 조사하느라 시간을 좀 잃었어요.찾을 수 없습니다...TRUE 발생 횟수를 반환하는 함수를 직접 작성했습니다.쓸모있기를 바랍니다.
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;
나는 생각했다
SELECT LENGTH('123-345-566') - LENGTH(REPLACE('123-345-566', '-', '')) FROM DUAL;
이거 드셔보세요
select count( distinct pos) from
(select instr('123-456-789', '-', level) as pos from dual
connect by level <=length('123-456-789'))
where nvl(pos, 0) !=0
'bbaaaac'에서 'aa'가 몇 개인지 'baaaac' 올소를 세다.
select count( distinct pos) from
(select instr('bbaaaacc', 'aa', level) as pos from dual
connect by level <=length('bbaaaacc'))
where nvl(pos, 0) !=0
다음은 문자와 하위 문자열 모두에 대해 기능하는 솔루션입니다.
select (length('a') - nvl(length(replace('a','b')),0)) / length('b')
from dual
여기서 a는 b의 오카렌스를 검색하는 문자열입니다.
좋은 하루 보내세요!
SELECT {FN LENGTH('123-345-566')} - {FN LENGTH({FN REPLACE('123-345-566', '#', '')})} FROM DUAL
select count(*)
from (
select substr('K_u_n_a_l',level,1) str
from dual
connect by level <=length('K_u_n_a_l')
)
where str ='_';
언급URL : https://stackoverflow.com/questions/8169471/how-to-count-the-number-of-occurrences-of-a-character-in-an-oracle-varchar-value
'source' 카테고리의 다른 글
어떤 컨트롤러에서 다른 피어 컨트롤러로 일부 데이터를 전달하려면 어떻게 해야 합니까? (0) | 2023.03.07 |
---|---|
다른 테이블스페이스에서 오라클 덤프를 가져오는 방법 (0) | 2023.03.07 |
AngularJS에서 입력 필드의 첫 번째 문자를 자동 자본화하는 방법은 무엇입니까? (0) | 2023.03.07 |
Oracle 11G에 SELECT 문 삽입 (0) | 2023.03.07 |
gson: null을 빈 문자열로 취급합니다. (0) | 2023.03.07 |