by 클로아 [SQL Query] oracle trim nvl [2021.03.23 13:57:52]
컬럼1은 데이터가 존재하고 컬럼 2는 null인 상태에서
1과 2를 비교하기 위해 where절에
trim(nvl(컬럼1,'-')) != trim(nvl(컬럼2,'-'))
이렇게 비교를 하고 있는데 결과값에 해당 사항이 나타나질 않습니다. 어떤 문제가 있는지 궁금합니다.
글쎄요? 컬럼1은 데이터가 존재하고 컬럼 2는 null인 상태라면? 해당 레코드는 위 조건에 부합하여 출력될텐데요? 만약 출력이 안된다면? 질문의 내용이 실제와 다른게 아닐까요?
몇번을 두들겨보고 확인해봐도 데이터는 제가 파악한게 맞는데 안나와서 죽겠습니다 ㅠ
실제 데이터와 사용한 쿼리 그대로 올랴줘 보세요. 아래는 제가 테스트한 내용입니다. 데이터 잘 나옵니다.
WITH t AS ( SELECT 'a' 컬럼1, null 컬럼2 FROM dual ) SELECT * FROM t WHERE TRIM(NVL(컬럼1, '-')) != TRIM(NVL(컬럼2, '-')) ;
제가 잘못봤네요.
컬럼 1의 값이 '5vvgf 공백 15칸 '
컬럼 2의 값이 널이 아니고 ' 공백20자 ' 였습니다.
두 컬럼의 총 길이는 같은 상태입니다.
설령 그렇다하더라도 나오는게 맞다고 생각되는데 안나오네요
공백문자를 트림 처리하면 널이 되지요. 널이 되면 비교시 거짓이 됩니다. 실제로 널이 들어가는지 확인해서 널이 없다면? TRIM, NVL 다 빼고 컬럼 자체로 비교하세요. 널이 있다면? TRIM 과 NVL 의 위치를 바꿔보세요.
감사합니다 nvl과 trim 위치를 바꾸니 해결되었습니다.