MSSQL 공백값과 NULL값 동시에 체크 하는 방법

SQL Server에서는 오라클과 다르게 NULL 값과 공백값을 다르게 취급합니다.

오라클의 경우에는 NULL과 공백값을 같은 값으로 취급하지만, SQL Server의 경우에는 NULL 값은 NULL, 공백은 공백으로 NULL이 아닌 값으로 취급합니다.

 

공백값과 NULL값

SQL Server 예제를 보도록 하겠습니다.

DECLARE @nullTest1 VARCHAR(20);
DECLARE @nullTest2 VARCHAR(20) = '';

SELECT ISNULL(@nullTest1,'no data') AS nullTest1
SELECT ISNULL(@nullTest2,'no data') AS nullTest2

 

결과

 

결과를 보면 @nullTest1 변수는 선언만 하고 값을 설정하지 않았기 때문에 NULL인 상태입니다.

ISNULL을 사용해서 결과를 보면 no data가 출력됩니다.

@nullTest2 변수에는 선언을 하고 ”으로 공백을 지정했습니다.

ISNULL 함수에 변수를 지정한 결과에서 알 수 있듯이 NULL이 아니기 때문에 no data가 아닌 @nullTest2에 대입한 값인 ” 공백이 출력됩니다.

SQL Server에서 NULL과 ” 공백을 같이 처리하고 싶은 경우 CASE를 사용하여 간단하게 처리할 수 있습니다.

 

NULL과 공백 동시 처리 예제

DECLARE @nullTest1 VARCHAR(20);
DECLARE @nullTest2 VARCHAR(20) = '';

SELECT 
	CASE WHEN ISNULL(@nullTest1,'') = ''
		THEN 'nothing data'
		ELSE @nullTest1
	END Test1
	, CASE WHEN ISNULL(@nullTest2,'') = ''
		THEN 'nothing data'
		ELSE @nullTest2
	END Test2

 

결과

 

첫 번째 CASE문과 두 번째 CASE문은 같습니다.

같은 결과가 표시되는 것을 확인하기 위해, 첫 번째에는 NULL 값을 지정한 변수 @nullTest1를 지정하였고, 두 번째에는 공백값인 를 지정한 변수 @nullTest2를 지정하였습니다.

조건문을 해석해 보면 CASE WHEN 조건에 ISNULL 함수를 사용했습니다.

ISNULL 함수에서는 값이 NULL인 경우에는 공백문자인 ”로 변환하고 있습니다.

즉, NULL이 들어오면 ”로 변환하지만 공백 문자인 ”가 들어오게 되면 NULL이 아니기 때문에 ”을 그대로 사용해 CASE 조건문인 = ” 와 비교합니다.

NULL이 들어와도 공백인 ”가 들어와도 nothing data를 출력하게 됩니다.

NULL과 공백문자인 ”가 동일하게 처리되게 됩니다.

 

정리

SQL Server에서 NULL값과 공백문자인 ”를 동일하게 처리하는 방법을 알아봤습니다.

CASE 조건문에 ISNULL을 사용하여 간단하게 로직을 만들 수 있습니다.

댓글