ISNULL, COALESCE, CASE, NULLIF 그리고 SIGN

Database/SQL Server / /
728x90

1.    ISNULL

1)      해당 값이 NULL일 시 함수의 다른 값으로 치환하는 함수

2)      Syntax

ISNULL ( check_expression , replacement_value )

 

3)      Example

DECLARE @A INT = NULL

DECLARE @B INT = 100

 

SELECT  @A AS NOT_ISNULL

  , ISNULL(@A,1AS ISNULL_VALUE

  , ISNULL(@A,@B) AS ISNULL_VARIABLES

 


2.    COALESCE

1)      해당 값들 중 첫 번째로 NULL이 아닌 값을 출력하는 함수

2)      ISNULL의 변수로 치환 내용과 비슷하게 사용가능하나 NULL일 가능성이 있는 여러 변수를 사용하여 처리하는 부분이 CASE문과 비슷하게 작동을 한다.

3)      Syntax

COALESCE ( expression [ ,...n ] )

 

4)      Example

DECLARE @A INT = NULL

DECLARE @B INT = NULL

DECLARE @C INT = 10

DECLARE @D INT = 100

 

SELECT  COALESCE(@A,@B,@C) AS COALESCE_THIRD

  , COALESCE(@A,@D,@B) AS COALESCE_SECOND

 


3.    CASE

1)      가장 많이 쓰이는 조건문으로 쓰인다.

2)      2가지 방식으로 사용이 가능하고 해당 구문을 통해 NULL 체크도 매우 쉽게 가능하다.

3)      Syntax

CASE input_expression   

     WHEN when_expression THEN result_expression [ ...n ]   

     [ ELSE else_result_expression ]   

END   

 

CASE  

     WHEN Boolean_expression THEN result_expression [ ...n ]   

     [ ELSE else_result_expression ]   

END  

 

4)      Example

DECLARE @A INT = NULL

DECLARE @B INT = 1

DECLARE @C INT = 100

DECLARE @D INT = 999

 

SELECT  

  CASE @A

  WHEN NULL THEN @B

  ELSE @C

  END AS NULL_CHECK,

  CASE

  WHEN @A IS NULL THEN @B

  ELSE @C

  END AS NULL_CHECK2,

  CASE @B

  WHEN 1 THEN @D

  ELSE @C

  END AS VALUE_CHECK

 


 

input_expression 사용하는 Syntax 이용하여 NULL 을 구분할 시 NULL_CHECK 컬럼의 결과와 같이 ELSE 구문으로 해당 구문으로 넘어가는 것을 확인할 수 있다.

해당 내용은 다음과 같은 결과라고 할 수 있다.

CREATE TABLE #TMP (A INT, B  INT)

GO

INSERT #TMP VALUES (1,NULL)

GO

 

SELECT * FROM #TMP

 


해당 데이터를 가진 테이블이 있다.

아래와 같이 쿼리를 실행해보고 그 결과를 비교하면 다음과 같다.

SELECT * FROM #TMP WHERE B = NULL

SELECT * FROM #TMP WHERE B IS NULL

 


, NULL 은 등호로 값이 구분될 수 없다.

4.    NULLIF

1)      함수 내 지정된 두 값이 같을 때 NULL을 반환하는 함수

2)      다른 내장 함수와 혼용하면 CASE문과 같은 조건문으로 활용 가능하다.

3)      Syntax

NULLIF ( expression , expression )  

 

4)      Example

DECLARE @A INT = -100

 

SELECT  NULLIF(@A,-1AS VALUE_CHK

  , NULLIF(@A,-100AS VALUE_CHK2

  , SIGN(@A) AS SIGH_CHK

  , NULLIF(SIGN(@A),1AS CHK1

  , NULLIF(SIGN(@A),-1AS CHK2

  , ISNULL(NULLIF(SIGN(@A),-1),0AS VALUE_REPLACE

 

728x90

'Database > SQL Server' 카테고리의 다른 글

window function(순위, 순서, 분산)  (0) 2021.08.17
Visual code on SQL server  (0) 2021.07.02
SQL Server 물리적 행 함수(RID 조회)  (0) 2021.05.03
통계와 동기, 비동기 처리 특징  (0) 2021.04.29
형 변환과 Callate  (0) 2021.04.29
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기