2016-07-21 2 views
0

2보다 수 ...오라클 - 내가 좋아하는 레코드가 토큰 적은

ID | KEY 
-------|--------- 
    1 | 123_456_abc 
    1 | 123_xyz 
    1 | 456_abc 
    2 | 123_abc 
    2 | 122_73_zcc 
    3 | 123_wer 
    4 | 345_23_fhd 
    4 | 3453_abc 
    5 | ad1fr2h3_abcasd 
    5 | ers2g45bb_abc2rtd 
    5 | asf23g_abc1_sf45 

내가 count(ID) where count(tokanize(numeric(KEY),'_')) < 2

가로 계산 (ID)가 6

+0

그래서, 당신이 필요 'key' 열에 <2'_ 문자가있는 레코드의 수. 옳은? –

+0

예. 그러나 키 값은 숫자 값만 tokanize가됩니다. – Cool

+0

KEY 목록의 요소 수는 그림과 같이 3 개 이상의 요소로 가변됩니까? 그 목록에있는 전화 번호는 어떤 위치에있을 수 있습니까? –

답변

0

당신은 시도 할 수있을 것이다하려면 카운트 기록 이 같은 것

SELECT COUNT(ID) FROM xyz WHERE key NOT LIKE '%_%_%'; 

이것은 2 개의 밑줄.

+0

숫자 토큰 카운트가 2보다 작은 count (id)를 원하기 때문에 부분 솔루션이 될 것입니다. ad1fr2h3_abc1asd, ers2g45bb_abc2rtd, asf23g_abc1_sf45 – Cool

+0

@ 쿨 - 일부 테스트 레코드는 원래 게시물에 추가하십시오. –

+0

어 .. .. 그 .. .. 추가! – Cool

0

는이 모든 기록을 제거하는 1 개 이상의 다음이 시도 후 수 로 시작하지 않는 사람을 제거

select sum(cnt) from (
select key, cnt, id from (
select key, length(regexp_replace(key,'[^_]*','')) cnt, id from table_name 
) where cnt < 2 

) where regexp_like(key,'[1-9]+(.)*') 
0

을 정리해 밑줄 :

select Count(1) from 
(with abc(id,key) as (select '1','123_456_abc' from dual 
        Union all 
        select '1','123_xyz' from dual 
        UNion all 
        select '1','456_abc' from dual 
        Union all 
        select '2','123_abc' from dual 
        UNion all 
        select '2','123_73_zcc' from dual 
        Union all 
        select '3','123_wer' from dual 
        UNion all 
        select '1','345_23_fhd' from dual 
        UNion all 
        select '1','345_abc' from dual 

) 
select key, length(regexp_replace(key,'[^_]*','')) cntr 
from abc) 
where cntr = 1