IS NOT NULL AND <> '' 질문입니다. 0 1 1,113

by smartC [2016.12.21 00:03:54]


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 <> ' '

이렇게 한칸 빈값을 주면 원하는 값이 나오구요..

고수님들의 설명 부탁드립니다.

by jkson [2016.12.21 08:01:01]

오라클에서 ''는 null과 같은 의미입니다.


null은 '빈 값'이 아니라 '알 수 없는 값'으로 이해하시면 좋을 것 같구요.

알 수 없는 값이기에 비교 연산자로 비교할 수 없습니다.


컬럼2 <> '' 는 컬럼2 <> null 과 같은 의미이므로 비교할 수 없어서 항상 false를 리턴하니

원하시는 값이 안 나오는 거구요.

' '는 공백 한칸인 문자로 인지하여 비교가 가능하기에 결과가 나오는 거구요.

 

참고로 pl/sql에서도

if v_val = null then.. 이런 구문은 항상 false죠..

null 비교시에는 항상 is null 혹은 is not null로 비교하셔야합니다.

null이 아닌 특정값과 부정 비교시 해당 컬럼이 null을 허용하는 컬럼이라면

nvl(컬럼,'*') != '비교값' 이렇게 하셔야 null 값도 출력되니 참고하세요.

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