sub_title
 MSSQL
제   목 MSSQL - NULL 값을 다른 값으로 대체하기
작성자 다자래 등록일 2008-08-21 17:51:51 조회수 101,392

[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
 
8
    
 
4
        list
 
※ 짧은 댓글일수록 예의를 갖추어 작성해 주시기 바랍니다.
line
reply cancel
 
번호 제목 글쓴이 추천 조회 날짜
34  인덱스를 위한 교재 추천 부탁 드립니다.   member 난모르겠 0 / 0 23396 2020-06-28
33  테이블 부하에 대해서...?   member 헨씀히포 0 / 0 23218 2019-05-24
32  MSSQL - 문자함수(len함수와 datalength 함수) 이미지   admin 웹마당넷 3 / 0 41073 2017-09-10
31  MSSQL - 백업 데이터를 다른 데이터베이스로 복원하기 이미지   admin 웹마당넷 6 / 2 29849 2015-07-05
30  MSSQL - SELECT 결과를 테이블로 만들기 이미지   admin 웹마당넷 1 / 0 27702 2015-06-26
29  기본 데이타 베이스 저장소 위치 바꾸기   member 아침마당 1 / 1 26428 2010-11-04
28  SQL Server 2008 복원시 트랜잭션 로그 백업   member 아침마당 1 / 0 26530 2010-09-25
27  SQL 인젝션 공격을 당했을 경우 인젝션 스크립트 지우는 저장 프로시저   member 아침마당 1 / 0 26074 2010-09-14
26  SQL Server 트랜잭션 로그 파일 줄이는 방법   member 아침마당 0 / 1 32444 2010-09-14
25  [MSSQL] SQL Server 2008 테이블 디자인 수정시 주의 사항   member 아침마당 1 / 0 28220 2010-08-22
24  [MSSQL] ISNULL 함수 간단 예제   member 아침마당 4 / 1 47993 2010-08-05
23  MSSQL - SELECT 와 동시에 INSERT 하기   admin 웹마당넷 14 / 3 153914 2009-02-03
22  MSSQL - IDENTITY 값 초기화 하기   admin 웹마당넷 3 / 2 63416 2009-01-27
21  MS-SQL 클러스터드 인덱스를 어떤 컬럼(들)에 생성하는 것이 유리할까?   member 마카로니 0 / 0 30010 2009-01-08
20  테이블 및 개체의 정보를 확인하기 위한 시스템 저장 프로시저(System Stored pr..   admin 웹마당넷 0 / 0 27625 2008-12-20
19  MSSQL 조인(JOIN)을 이용한 UPDATE 및 DELETE   admin 웹마당넷 5 / 0 53894 2008-11-29
18  SQL injection 웹에서 체크하기   member 수확물 0 / 0 26855 2008-10-10
17  MSSQL - CASE WHEN문   member 다자래 1 / 0 69963 2008-09-19
16  [MSSQL] 파티션 정보 검색   member 수확물 0 / 0 28699 2008-09-08
15  [MSSQL] DDL_Trigger_Example   member 수확물 0 / 0 34643 2008-09-08
14  [MSSQL] xml을 이용한 split   member 수확물 1 / 0 28819 2008-08-26
13  MSSQL - UNION ALL을 이용했을때 테이블명 가져오기 이미지   member 다자래 0 / 0 40219 2008-08-21
12  MSSQL - NULL 값을 다른 값으로 대체하기   member 다자래 8 / 4 101392 2008-08-21
11  [MSSQL] View안에 저장프로스져를 쓰는 방법   member 수확물 0 / 0 45378 2008-08-08
10  MSSQL - 숫자 세자리 마다 콤마(쉼표) 찍기   member 다자래 5 / 0 59233 2008-08-07
write
[2] button