[SQL] 어떻게 오라클 VARCHAR 값의 문자의 발생 수를 계산하려면?
SQL어떻게 오라클 VARCHAR 값의 문자의 발생 수를 계산하려면?
VARCHAR2 문자열에 - 어떻게 문자의 발생 수를 계산 할 수 있습니까?
예:
select XXX('123-345-566', '-') from dual;
----------------------------------------
2
해결법
-
==============================
1.여기 가서 :
여기 가서 :
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;
유착의 마지막 0이 사건을 잡는다 어디 빈 문자열에있어 계수 (즉 NULL 때문에 길이 (NULL) = NULL ORACLE에서).
-
==============================
2.REGEXP_COUNT 트릭을 수행해야합니다
REGEXP_COUNT 트릭을 수행해야합니다
select REGEXP_COUNT('123-345-566', '-') from dual;
-
==============================
3.여기에 아이디어 : 빈 문자열과 대시 문자없는 시도 교체 다. 그런 다음 남아 얼마나 많은 대시를 계산합니다.
여기에 아이디어 : 빈 문자열과 대시 문자없는 시도 교체 다. 그런 다음 남아 얼마나 많은 대시를 계산합니다.
select length(regexp_replace('123-345-566', '[^-]', '')) from dual
-
==============================
4.나는 매우 비슷한 문제에 직면로 재조정 ...하지만 RegExp_Count가 해결되지 수 있습니다. 몇 번이나 문자열 '16, 124,3,3,1,0, '3'포함 '? 우리는 2 번 볼 수 있지만 RegExp_Count은 1. 같은 일이 ''bbaaaacc '과'AA '에서 찾고있다 반환으로 - 3 회 RegExp_Count 반환 단지이 있어야한다.
나는 매우 비슷한 문제에 직면로 재조정 ...하지만 RegExp_Count가 해결되지 수 있습니다. 몇 번이나 문자열 '16, 124,3,3,1,0, '3'포함 '? 우리는 2 번 볼 수 있지만 RegExp_Count은 1. 같은 일이 ''bbaaaacc '과'AA '에서 찾고있다 반환으로 - 3 회 RegExp_Count 반환 단지이 있어야한다.
select REGEXP_COUNT('336,14,3,3,11,0,' , ',3,') from dual; select REGEXP_COUNT('bbaaaacc' , 'aa') from dual;
나는 웹 솔루션을 연구하는 시간을 잃었다. 난 내 자신의 기능을 썼다 '을 (를) 찾을 수 없습니다 ... 그래서 occurance의 반환 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;
-
==============================
5.나는 생각
나는 생각
SELECT LENGTH('123-345-566') - LENGTH(REPLACE('123-345-566', '-', '')) FROM DUAL;
-
==============================
6.여기에 문자와 문자열 모두를 위해 작동하는 솔루션입니다 :
여기에 문자와 문자열 모두를 위해 작동하는 솔루션입니다 :
select (length('a') - nvl(length(replace('a','b')),0)) / length('b') from dual
어디는 B의 발생을 검색하는 문자열입니다
멋진 일이!
-
==============================
7.
SELECT {FN LENGTH('123-345-566')} - {FN LENGTH({FN REPLACE('123-345-566', '#', '')})} FROM DUAL
-
==============================
8.
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 ='_';
-
==============================
9.이 시도 할 수 있습니다
이 시도 할 수 있습니다
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
그것은 얼마나 많은 'AA'에서 'BBA ACC'에 대한 "제대로"오슬로를 계산
select count( distinct pos) from (select instr('bbaaaacc', 'aa', level) as pos from dual connect by level <=length('bbaaaacc')) where nvl(pos, 0) !=0
from https://stackoverflow.com/questions/8169471/how-to-count-the-number-of-occurrences-of-a-character-in-an-oracle-varchar-value by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 공간을 무시 쿼리 (0) | 2020.05.22 |
---|---|
[SQL] 오라클 SQL의 맞춤 주문 (0) | 2020.05.22 |
[SQL] MySQL은 : 어떻게 특정 지점에서 자동 증가를 시작합니까? (0) | 2020.05.22 |
[SQL] SQL 테이블이 존재하는지 확인 (0) | 2020.05.22 |
[SQL] UPDATE 경우는 SQL Server 2008의 다른 INSERT 존재 [중복] (0) | 2020.05.22 |