[개발] 프로그램 지식

[ORALCE] where절에서 case when 조건이 안되는 이유, 조회에도 조회된 값이 없는 경우

  • -
반응형

결론은 비교하는 컬럼의 타입을 확인하고, 들어간 데이터가 공백이 들어가있는지 확인해봐야 함 ( ex. 컬럼1 CHAR(7), 컬럼 2 CHAR(6) )

where 조건 절에서

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

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칸을 공백으로 들어간다.

예를 들어 데이터가 '55555'를 입력했다면

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

컬럼1의 '55555 '값과 컬럼2의 '55555'값이 같은지 판단하게 될 경우

당연히 거짓이므로, 조회된 값이 없게 된다.

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

TRIM(컬럼1)

or

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

반응형
Contents

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

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