SELECT 컬럼1, 컬럼2 FROM A 로 조회시
컬럼1 컬럼2
1 값1
2 값2
3 값3
4
이렇게 존재할때
SELECT 컬럼1, 컬럼2 FROM A
WHERE 1=1
AND 컬럼2 IS NOT NULL 하면
컬럼1 컬럼2
1 값1
2 값2
3 값3
이렇게 조회됩니다.
그러나
SELECT 컬럼1, 컬럼2 FROM A
WHERE 1=1
AND 컬럼2 <> ''
위처럼 했을때는 아무것도 조회가 되지 않네요..
저는 IS NOT NULL이 아닌 ''로 공백이 아닌 값은 출력되기를 원하는데요..
SELECT 컬럼1, 컬럼2 FROM A
WHERE 1=1
AND 컬럼2 <> ' '
이렇게 한칸 빈값을 주면 원하는 값이 나오구요..
고수님들의 설명 부탁드립니다.
오라클에서 ''는 null과 같은 의미입니다.
null은 '빈 값'이 아니라 '알 수 없는 값'으로 이해하시면 좋을 것 같구요.
알 수 없는 값이기에 비교 연산자로 비교할 수 없습니다.
컬럼2 <> '' 는 컬럼2 <> null 과 같은 의미이므로 비교할 수 없어서 항상 false를 리턴하니
원하시는 값이 안 나오는 거구요.
' '는 공백 한칸인 문자로 인지하여 비교가 가능하기에 결과가 나오는 거구요.
참고로 pl/sql에서도
if v_val = null then.. 이런 구문은 항상 false죠..
null 비교시에는 항상 is null 혹은 is not null로 비교하셔야합니다.
null이 아닌 특정값과 부정 비교시 해당 컬럼이 null을 허용하는 컬럼이라면
nvl(컬럼,'*') != '비교값' 이렇게 하셔야 null 값도 출력되니 참고하세요.