[개발] 프로그램 지식

[ORACLE] where절에서 case when 조건이 안되는 이유

  • -
반응형

1. 결론은 비교하는 컬럼의 타입이 달라서 그럼. 비교하는 컬럼의 타입을 확인해보고, 들어간 데이터에 혹시 공백이 들어가있는지 확인해보기 ( ex. 비교대상 컬럼1 의 타입 CHAR(7), 비교대상 컬럼2의 타입 CHAR(6) )

 

 

2. 예시

where 컬럼1 = case when ~ then ( select 컬럼 2 from 테이블 2 )
             else ( select 컬럼3 from 테이블 3 ) 
             end

이 경우 컬럼 1과 컬럼 2

혹은 컬럼1과 컬럼 3을 비교하게 되는데

 

둘의 타입이 다른 경우 조건이 성립하지 않아 조회된 값이 계속 뜨지 않게 됨

 

예를 들어 컬럼1의 타입이 CHAR(6)이고

컬럼2와 컬럼3의 타입이 CHAR(5)인 경우

 

CHAR(6)의 경우 데이터가 5자리가 들어가도 나머지 1칸을 공백으로 들어간다.

예를 들어 데이터가 '5555'를 insert했다면

컬럼1에는 공백이 포함되는 '5555 '가 들어간다.

 

컬럼 1의 '55555 '와 컬럼 2의 '55555'값이 판단하게 될 경우 당연히 거짓이므로, 조회된 값이 없게 된다.

 

 

이 경우 컬럼1의 데이터를 공백 제거해서 조건비교를 할 수 있도록 수정하면 된다.

TRIM(컬럼1)

or

NVL( TRIM(컬럼1), '0' )

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.