연속글자 추출 1 11 1,861

by 궁금이 [SQL Query] [2015.09.21 12:56:41]


연속된 데이타가 3글자이상이면 출력하게 하는구조입니다.(왼쪽,오른쪽 중간글자 상관무)

어떻게 해야될까요?

 

순번     성명

---------------------

1          홍길동

2           A홍길동

3           홍길동A

4           홍A길동

5            A홍B길동

 

쿼리수행결과>

순번     성명

----------------------------

1       홍길동

2        A홍길동

3        홍길동A

by 겸댕2후니 [2015.09.21 13:20:39]

한글이 연속3글자 이상이면 출력하는건가요?


by 궁금이 [2015.09.21 13:23:27]

한글,영문 포함해서 3글자이상입니다.


by 마농 [2015.09.21 14:19:26]
WITH t AS
(
SELECT 1 no, '홍길동' nm FROM dual
UNION ALL SELECT 2, 'A홍길동'  FROM dual
UNION ALL SELECT 3, '홍길동A'  FROM dual
UNION ALL SELECT 4, '홍A길동'  FROM dual
UNION ALL SELECT 5, 'A홍B길동' FROM dual
)
SELECT no, nm
  FROM (SELECT no, nm
             , LAG (nm, 2) OVER(ORDER BY no) v1
             , LAG (nm, 1) OVER(ORDER BY no) v2
             , LEAD(nm, 1) OVER(ORDER BY no) v3
             , LEAD(nm, 2) OVER(ORDER BY no) v4
          FROM t
        )
 WHERE REGEXP_LIKE(v1||','||v2||','||nm, '.*(...).*,.*\1.*,.*\1.*')
    OR REGEXP_LIKE(v2||','||nm||','||v3, '.*(...).*,.*\1.*,.*\1.*')
    OR REGEXP_LIKE(nm||','||v3||','||v4, '.*(...).*,.*\1.*,.*\1.*')
;

 


by 마농 [2015.09.21 14:33:49]

음. 3번 연속이란 말은 없었네요.

제가 3글자 때문에 착각한듯 하네요.

SELECT no, nm
  FROM (SELECT no, nm
             , LAG (nm) OVER(ORDER BY no) v1
             , LEAD(nm) OVER(ORDER BY no) v2
          FROM t
        )
 WHERE REGEXP_LIKE(v1||','||nm, '.*(...).*,.*\1.*')
    OR REGEXP_LIKE(nm||','||v2, '.*(...).*,.*\1.*')
;

 


by 궁금이 [2015.09.21 14:47:36]

네... 연속된 글자 3개가 중복인 row추출입니다.


by 마농 [2015.09.21 14:50:29]

음... 그냥 중복인가요? 연속 중복인가요?

저는 연속 개념으로 답변 드렸는데요.

예를 들어 (6 홍길동) 이 있을 때

연속 개념으로 보면 바로 앞의 5번과 중복이 아닌 것이고.

연속 개념이 아니라면? 앞선 1,2,3 과 중복 되어 표시되어야 겠지요.


by 궁금이 [2015.09.21 14:52:25]

즉 , 연속3글자이상 기준 전체 row기준 1개이상 중복된 row입니다.

연속은 아니고, 전체  row기준 연속3글자이상 인게 중복되게 검출되면되는구조입니다.

group by 의 개념입니다.


by 마농 [2015.09.21 14:52:54]

연속? 불연속?


by 궁금이 [2015.09.21 14:56:42]

그룹바이 개념으로 그냥 중복된 데이타 검출입니다.

%홍길동% 이 포함된 row가 1개이상인 셈이죠.


by 마농 [2015.09.21 15:00:17]
WITH t AS
(
SELECT 1 no, '홍길동' nm FROM dual
UNION ALL SELECT 2, 'A홍길동'  FROM dual
UNION ALL SELECT 3, '홍길동A'  FROM dual
UNION ALL SELECT 4, '홍A길동'  FROM dual
UNION ALL SELECT 5, 'A홍B길동' FROM dual
)
SELECT DISTINCT a.no, a.nm
  FROM t a
     , t b
     , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 99) c
 WHERE c.lv <= LENGTH(a.nm) - 2
   AND a.no != b.no
   AND b.nm LIKE '%'||SUBSTR(a.nm, lv, 3)||'%'
;

 


by 궁금이 [2015.09.22 08:51:07]

good.. 역시 쿼리의 지존.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입