오라클 문자를 섞어가면서 비교 가능 할까요? 0 4 1,069

by 정충보국 [2018.04.19 18:21:52]


예를 들어 A, B라는 컬럼이 있습니다.

A는 가나다

B는 다나가

이런식으로 되어 있는데 단순히 비교하면 서로 다른값이 되지만 서로 한글자씩 때어서 조합하면 값은 같습니다.

저런식으로 비교 가능할까요?

by 신이만든지기 [2018.04.19 18:44:19]
WITH T AS ( 
SELECT '가나다' COL1, '다가나' COL2 FROM DUAL UNION ALL
SELECT '홍길동' COL1, '김길동' COL2 FROM DUAL
)
SELECT COL1
     , COL2
     , CASE
           WHEN     INSTR( COL1, SUBSTR( COL2, 1, 1 )) > 0
                AND INSTR( COL1, SUBSTR( COL2, 2, 1 )) > 0
                AND INSTR( COL1, SUBSTR( COL2, 3, 1 )) > 0 THEN 'Y'
           ELSE 'N'
       END MATCH_YN
  FROM T
;

글자수가 고정이라면 이런식으로 가능합니다.


by 무지버기 [2018.04.20 09:18:09]
--  '가나다' col1, '다가가' col2 이런 케이스는 매칭이라고 볼수 없다면 아래와 같이 변경해봤습니다.

WITH T AS ( 
SELECT '가나다' col1, '다가가' col2 FROM DUAL UNION ALL
SELECT '가나다' , '다나가'    FROM DUAL UNION ALL
SELECT '가나다' , '다12나가'  FROM DUAL UNION ALL
SELECT '홍길동' , '김길동'    FROM DUAL
)
SELECT
gb, 
CASE WHEN   LISTAGG(SUBSTR(col1,lv,1)) WITHIN GROUP(ORDER BY SUBSTR(col1,lv,1))
       =    LISTAGG(SUBSTR(col2,lv,1)) WITHIN GROUP(ORDER BY SUBSTR(col2,lv,1)) THEN 'Y' ELSE 'N' END MA_YN
FROM 
(SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1) gb FROM t),
(SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 10)
WHERE lv <= GREATEST(LENGTH(col1),LENGTH(col2))
GROUP BY gb

 


by 마농 [2018.04.20 11:30:36]
SELECT a, b
     , CASE WHEN REGEXP_REPLACE(a, '['||b||']') IS NULL
             AND REGEXP_REPLACE(b, '['||a||']') IS NULL
            THEN 1 ELSE 0 END flag
  FROM t
;

 


by 마농 [2018.04.20 13:40:27]

'가가나' 와 '나가나' 는 같은 건가요 다른 건가요?
  - 둘 다 '가' 와 '나' 로 이루어졌으므로 같은 거다?
  - '가' 와 '나' 의 글자수가 다르므로 다른 거다?

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