[MSSQL]Mssql null 값 대체

SQL 2013. 1. 5. 13:41

[MSSQL - NULL 값을 다른 값으로 대체하기]


- NULL 값을 다른 값으로 대체하기

MSSQL 에서는 컬럼의 값이 NULL인 경우 이를 다른 값으로 대체하기 위한 IsNULL 함수를 제공합니다.

사용법) IsNULL( 표현식, NULL일때의 값 )

아래의 쿼리문은 age 컬럼의 값이 NULL일 경우 0을 출력합니다. age 컬럼은 INTEGER 형입니다.

SELECT IsNULL( age, 0 ) AS age FROM testNULL

아래의 쿼리문은 uid 컬럼의 값이 NULL일 경우 'UNKNOWN') 을 출력합니다. uid 컬럼은 VARCHAR 형입니다.

SELECT IsNULL( uid, 'UNKNOWN' ) AS age FROM testNULL

위의 두개의 예제에서 보시다시피 컬럼의 값이 NULL 일 경우 대체하는 값이 같은 데이터형이어야 합니다.같은 데이터형이 아니래도 IsNULL 함수는 상당히 똑똑해서 사용자가 잘못 입력한 값에 대해서 치완이 가능하면 데이터형을 자동 치완해 줍니다. 그런데 치완이 불가능한 다음과 같은 경우에는 에러가 발생합니다.

-- 에러 출력 예
SELECT
IsNULL( age, 'UNKNOWN' ) AS age FROM testNULL

에러메시지)
varchar 값 'UNKNOWN'을(를) int 데이터 형식의 열로 변환하는 중 구문 오류가 발생했습니다.

그렇다면 데이터 형이 datetime 인 컬럼의 값이 NULL 일 경우에는 어떻게 치완하는게 좋을까요? 아래는 데이터 형이 datetime인 regdate 컬럼의 값이 NULL 일 경우 IsNULL 함수의 사용예입니다.

-- datetime 이 NULL 인 경우
SELECT IsNULL( regdate, 0 ) AS regdate FROM testNULL

출력된 regdate 의 컬럼의 값은 MSSQL의 기본 값인 "1900-01-01-00:00:00.000" 와 같이 출력됩니다.
이 결과 값을 사용하는 개발언어에서 적당한 값으로 다시 치완하는 방법도 있겠지만 데이타베이스 차원에서 먼저 선처리 해주는 게 좋습니다. regdate의 컬럼 값이 NULL 일 경우 다음과 같이 출력하기를 원한다면 "0000-00-00" IsNULL 함수전에 아래와 같이 Convert 함수를 이용해서 VARCHAR 형으로 치완해 주면 원하는 결과 값을 얻으실 수 있습니다.

-- datetime 이 NULL 인 경우
SELECT IsNULL( CONVERT(VARCHAR, regdate ), '0000-00-00' ) AS regdate FROM testNULL

작성자: 다자래(mfcchang@naver.com)
웹제작 토탈 커뮤니티 http://www.webmadang.net

 

Posted by 요지
,