그러나 오버헤드가 너무 클 것같았다. 고민하던중 다음과 같은 포스팅을 찾을 수있엇다
두 개의 문자열 사이에 유사도가 가까울수록 같은 계열의 값으로 판단할 수 있을것이다.
이러한 기능을 수행하려면 모든 데이터 값들간의 조인이 일어나야하는데 사용자 정의 함수를 사용하면
최적화 되지 않는 경우가 많기 때문에 프로젝트에서 결과값을 얻기 쉽지가 않다.
Oracle 11g에서의 new feature가 있는데 아주 유용한 기능으로 소개하기로 한다.
DROP TABLE match_tab;
CREATE TABLE match_tab (
id NUMBER,
col1 VARCHAR2(50),
col2 VARCHAR2(50),
CONSTRAINT match_tab_pk PRIMARY KEY (id)
);
INSERT INTO match_tab VALUES (1, 'Peter Parker', 'Pete Parker');
INSERT INTO match_tab VALUES (2, 'Peter Parker', 'peter parker');
INSERT INTO match_tab VALUES (3, 'Clark Kent', 'Claire Kent');
INSERT INTO match_tab VALUES (4, 'Wonder Woman', 'Ponder Woman');
INSERT INTO match_tab VALUES (5, 'Superman', 'Superman');
INSERT INTO match_tab VALUES (6, 'The Hulk', 'Iron Man');
INSERT INTO match_tab VALUES (11, '환자입원일시', '환자입원일');
INSERT INTO match_tab VALUES (12, '슈퍼맨', '슈퍼 맨');
INSERT INTO match_tab VALUES (13, '슈퍼맨', '슈퍼맨');
INSERT INTO match_tab VALUES (14, '슈퍼맨', '아이언맨');
INSERT INTO match_tab VALUES (15, '동창생', '도차생');
INSERT INTO match_tab VALUES (16, '일반 환자 격리', '일반환자격리');
INSERT INTO match_tab VALUES (17, '트러블 메 이 커', '트메이크');
COMMIT;
SELECT col1,
col2,
UTL_MATCH.edit_distance(col1, col2) AS ed,
UTL_MATCH.edit_distance_similarity(col1, col2) AS eds,
UTL_MATCH.jaro_winkler(col1, col2) AS jw,
UTL_MATCH.jaro_winkler_similarity(col1, col2) AS jws
FROM COMP_TABLE
ORDER BY id;
우리가 눈여겨 볼만한것은 유사도입니다. EDS, JWS
영문과 한글일때의 유사도의 차이는 조금 다르지만 문자열에 대한 유사도를 찾을수 있는
좋은 기능입니다.
잘만 응용하면 좋은 TIP이 될수 있을것입니다.
'To be Developer > DataBase' 카테고리의 다른 글
트랜잭션이란 무엇일까? (0) | 2019.11.12 |
---|---|
[윈도우10]mysql 5.7.10 수동 설치기 (0) | 2017.07.25 |
[ORACLE / SQL] Matching Query 사람간 유사한답변 한사람 이어주기 (0) | 2017.05.17 |
[SQL]원하는 사용자 계정내에서 모든 테이블 삭제하기 (0) | 2017.01.20 |
[Oracle]계정생성및 권한주는 쿼리 (0) | 2017.01.18 |