함수 관련 질문입니다. 0 6 2,950

by 클로아 [SQL Query] oracle trim nvl [2021.03.23 13:57:52]


컬럼1은 데이터가 존재하고 컬럼 2는 null인 상태에서

1과 2를 비교하기 위해 where절에

trim(nvl(컬럼1,'-')) != trim(nvl(컬럼2,'-'))

이렇게 비교를 하고 있는데 결과값에 해당 사항이 나타나질 않습니다. 어떤 문제가 있는지 궁금합니다.

 

by 마농 [2021.03.23 15:12:21]

글쎄요?
컬럼1은 데이터가 존재하고 컬럼 2는 null인 상태라면?
해당 레코드는 위 조건에 부합하여 출력될텐데요?
만약 출력이 안된다면? 질문의 내용이 실제와 다른게 아닐까요?


by 클로아 [2021.03.23 15:23:55]

몇번을 두들겨보고 확인해봐도 데이터는 제가 파악한게 맞는데 안나와서 죽겠습니다 ㅠ


by 마농 [2021.03.23 15:30:40]

실제 데이터와 사용한 쿼리 그대로 올랴줘 보세요.
아래는 제가 테스트한 내용입니다.
데이터 잘 나옵니다.
 

WITH t AS
(
SELECT 'a' 컬럼1, null 컬럼2 FROM dual
)
SELECT *
  FROM t
 WHERE TRIM(NVL(컬럼1, '-')) != TRIM(NVL(컬럼2, '-'))
;

 


by 클로아 [2021.03.23 15:55:54]

 

제가 잘못봤네요.

컬럼 1의 값이 '5vvgf 공백 15칸              ' 

컬럼 2의 값이 널이 아니고 '         공백20자           ' 였습니다.

두 컬럼의 총 길이는 같은 상태입니다.

설령 그렇다하더라도 나오는게 맞다고 생각되는데 안나오네요 


by 마농 [2021.03.23 16:03:21]

공백문자를 트림 처리하면 널이 되지요.
널이 되면 비교시 거짓이 됩니다.
실제로 널이 들어가는지 확인해서
널이 없다면? TRIM, NVL 다 빼고 컬럼 자체로 비교하세요.
널이 있다면? TRIM 과 NVL 의 위치를 바꿔보세요.


by 클로아 [2021.03.23 16:20:58]

감사합니다 nvl과 trim 위치를 바꾸니 해결되었습니다.

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