회사/사내개발

[mssql] WHERE DELETE_FLAG <> 'Y' 결과가 제대로 나오지 않을 때

lowellSunny 2020. 10. 18. 03:37

WHERE DELETE_FLAG <> 'Y' 해당 구문 같은 경우에

삭제된 데이터로 간주되는 경우 해당 데이터를 제외하고 출력하는 경우에 사용한다.

 

그런데 mssql에서 조건절에 비교문을 넣었는데

데이터에 null값이 있으면 조건에 해당하는 데이터들을 정상적으로 가져오지 않는다.

 

----------수정 전----------

AND DELETE_FLAG <> 'Y'

위와 같이 조건절을 넣으면 DELETE_FLAG가 'Y'가 아닌 ('N'이나 NULL) 데이터들을

모두 가져올 줄 알았는데 아무 데이터도 가져오지 않는 것이다.

 

데이터가 COMMIT이 안됐나 갖가지 이유를 찾다가 선임한테 여쭤봤더니

ISNULL로 NULL인 데이터에 대해 정의를 해주고 비교문을 선언해야한다고 하신다.

하.. 심했다. 별걸 다 까먹었나보다. 공부좀 해야겠네 ^^;

 

----------수정 후----------

AND ISNULL(A.DELETE_FLAG, '') <> 'Y'

 

 

 

이에 아울러 최근에 또 깨달았던 것이

SUM(컬럼명) 과 같은 계산식은 데이터가 모두 null인 경우 0이 나올 줄 알았는데 null이 나온다.

데이터가 null인 경우 0으로 간주하는 것이 아니라 null인 것을 제외하고 계산하기 때문에

데이터가 아예 없는 경우엔 결과값이 null로 나오는 것 같다.