MSSQL 공백 값 체크 - MSSQL gongbaeg gabs chekeu

ISNULL 함수

ISNULL 함수는 쿼리 값이 null 값이 될 경우에 해당 값을 다른 값으로 변환시키는 역할을 합니다.
이 NULL 값과 공백이라는 값은 다르게 인식하기 때문에 프로그램에서 오류를 많이 만들어 내는데요.
이런 차이 때문에 NULL 값을 변경하기 위해서 많이 사용하고 있는 함수입니다.

ISNULL 함수 사용법

--기본 문법
ISNULL(컬럼, 컬럼 값이 NULL 일 경우 변환시킬 값)


ISNULL 함수 예제

1. bebeya 테이블에서 NAME을 검색하는데 만약 이름이 NULL값이 된다면 '이름이 없습니다'로 변경해서 출력

SELECT ISNULL(NAME,'이름이 없습니다') AS NAME
FROM bebeya

이상으로 null 값을 체크해서 다른 값으로 변경해주는 ISNULL 함수 사용법에 대해서 알아보았습니다

오라클은 NULL값과 공백('')값을 똑같이 NULL로 처리한다는 글을 본 적이 있습니다.

이것을 직접 확인하기 위해서 간단한 테스트를 진행해봤습니다.

a컬럼에 5개의 값을 넣을껀데 NULL값을 포함하여 공백('')과 공백사이에 띄어쓰기를 여러번한 값들(' ','  ','     ')을 같이 삽입하고 NULL로 분류가되는지 확인해보겠습니다.

--테이블 생성

create table unique_test
(a varchar2(10),
b varchar2(20),
c number
)
;


--데이터 삽입
insert into unique_test(a,b,c) values('','a',1);
insert into unique_test(a,b,c) values(' ','b',2);
insert into unique_test(a,b,c) values('   ','c',3);
insert into unique_test(a,b,c) values('         ','d',4);
insert into unique_test(a,b,c) values(null,'e',5);

확인

5건의 데이터를 삽입하고 null값인 것을 조회해보았을 때, 공백이 없는 값('')과 NULL로 삽입한 데이터가 조회되었습니다.

나머지 공백이 있는 값들은 데이터의 길이를 조회해본 결과, 길이가 나오고 있었고 결국 NULL 값이 아니라 길이가 있는 데이터 값이며, 공백의 숫자만큼의 값이 들어가 있는 값이 된다는 것입니다.

--NULL 값 확인
SQL> select * from unique_test where a is null;
A          B                    C          
---------- -------------------- -----------
           a                              1
           e                              5
           
           
--각 데이터값(a컬럼)의 길이 확인
SQL> select length(a),b.c from unique_test;
LENGTH(A)   B                    C          
----------- -------------------- -----------
            a                              1
          1 b                              2
          3 c                              3
          9 d                              4
            e                              5
            

결론 : NULL값과 공백이 없는 값('')은 동일하게 NULL입니다. 하지만 공백이 한칸이라도 있으면, 그 값은 NULL 이아니라 공백이 들어간 값이 되어 버립니다.

이 테스트는 티베로에서도 동일하게 수행하였고, 동일한 결과값이 나왔습니다. 티베로도 NULL값 사용시 공백이 없는 값('')으로 쓰거나 NULL로 사용하여야 합니다.

MSSQL 공백 값 체크 - MSSQL gongbaeg gabs chekeu

 데이터 중 NULL값이 있을 수 있습니다. 이런 NULL값을 체크하여 다른문자로 대체를 하여 표현할 수도 있고, 그것으로 비교할 수도 있는 ISNULL에 대해 알아보겠습니다.

ISNULL(값, NULL일 경우 대체하고 싶은 값)

: ISNULL에 NULL을 체크하고 싶은 칼럼이나 값을 적고, 그게 NULL일 경우 대체할 값을 적어주면 됨.

아래 예시를 보시면 @V_VAL이라는 변수가 NULL인데 이걸 ISNULL을 사용면서 '값없음'으로 표현하는걸 확인할 수 있습니다.

DECLARE @V_VAL NVARCHAR(10) = NULL

SELECT ISNULL(@V_VAL, '값없음') // 값없음

TMP_ANIMAL이라는 테이블이 아래와 같이 데이터가 들어가 있습니다. 이 데이터에 ISNULL을 사용하는 예시 2개를 보여드리겠습니다.

MSSQL 공백 값 체크 - MSSQL gongbaeg gabs chekeu
TMP_ANIMAL 테이블

예시1) 테이블 TMP_ANIMAL에서 칼럼 YN(사용유무)가 유이면 'Y'이고, 무면 'N' 또는 NULL인데 조회시 NULL인 값도 'N'으로 조회될 수 있도록 하시오.

SELECT NAME, ISNULL(YN, 'N') AS YN
  FROM TMP_ANIMAL

 위의 쿼리를 사용하게 되면 아래와 같이 'Y'였던 dog와 rabbit을 제외한 나머지가 'N'으로 조회된 것을 확인할 수 있습니다.

MSSQL 공백 값 체크 - MSSQL gongbaeg gabs chekeu
예시1 결과값

예시2) 테이블 TMP_ANIMAL에서 칼럼 YN(사용유무)가 유이면 'Y'이고, 무면 'N' 또는 NULL인데 사용유무가 무인 동물의 이름을 조회되도록 하시오.

SELECT NAME
  FROM TMP_ANIMAL
 WHERE ISNULL(YN, 'N') = 'N'

 위의 쿼리를 사용하게 되면 아래와 같은 결과를 얻게 됩니다. 'Y'였던 dog와 rabbit을 제외한 데이터에 있는 모든 동물의 이름이 조회되는 걸 확인할 수 있습니다. 그리고 조회조건에서도 ISNULL을 사용할 수 있다는걸 알 수 있습니다.

MSSQL 공백 값 체크 - MSSQL gongbaeg gabs chekeu