Search

2018년 12월 23일 일요일

[Database] [Oracle] sequence에 상관없이 string 값 비교하기 (TRANSLATE)

#1. 들어가기

특히, 코드값 등을 비교하는 쿼리를 작성할 때, 아래와 같이 특정 시퀀스에 관계없이 일치 여부를 판별해야 하는 경우가 종종 있다.
아래의 예는 TMP_TABLE에서 A_COL과 B_COL을 비교해 EQUAL 컬럼을 생성한 예제이다.



즉, 모든 유니크한 원소의 개수는 일치하면서 순서만 다른 경우를 판별하는 케이스인데, CONNECT BY LEVEL 등을 활용한 구문보다 TRANSLATE의 알고리즘을 활용하면 보다 간결하고 빠르게 동작하는 쿼리를 작성할 수 있다.


#2. 쿼리

아래와 같이 TRANSLATE 구문을 사용해 문제를 해결할 수 있다.

--string값의 순서에 상관없이 비교하기
SELECT      A_COL
           ,B_COL
           ,CASE WHEN TRANSLATE(A_COL, B_COL,' ') = TRANSLATE(B_COL, A_COL,' ')
                 THEN 'TRUE'
            ELSE      'FALSE'  END  AS  EQUAL
FROM        TMP_TABLE
;




댓글 없음:

댓글 쓰기