DB/MySQL

[MySQL] IFNULL()

동호다찌 2023. 1. 18. 13:46
반응형

IFNULL()

MySQL에서 해당 Column의 값이 NULL을 반환할 경우 다른 값으로 출력하고 싶다면 INFULL함수를 사용하면 된다.

  • IF() 함수와 마찬가지로 익숙하다.
  • 오라클의 NVL()정도로 생각해도 문제가 없을 것 같다.
  • expr1이 NULL이면 expr2, 그렇지 않으면 expr1 을 return
SELECT IFNULL(expr1, expr2) FROM 테이블명;

SELECT IFNULL(Column명, "Null일 경우 대체 값") FROM 테이블명;

https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_ifnull

 

MySQL :: MySQL 8.0 Reference Manual :: 12.5 Flow Control Functions

12.5 Flow Control Functions Table 12.7 Flow Control Operators Name Description CASE Case operator IF() If/else construct IFNULL() Null if/else construct NULLIF() Return NULL if expr1 = expr2 CASE value WHEN compare_value THEN result [WHEN compare_value

dev.mysql.com

 


SELECT address , address2  FROM address a LIMIT 10;

 

 

예시

-- 값이 Null 인 경우 0으로 치환한다.
-- 값이 Null 인 경우 <주소없음>으로 치환한다.
SELECT address , IFNULL(address2,0),IFNULL(address2,'주소없음')  FROM address a LIMIT 10;

 

비슷한 사용법

  • Case When을 사용해서 반환값 지정
-- adress2가 Null이라면 0으로 치환
-- adress2가 빈스트링이라면 주소없음으로 치환
-- 둘다 아닐 경우 기존 adress2로 반환
SELECT address , 
	   CASE WHEN address2 = NULL THEN 0
	        WHEN address2 = '' THEN '주소없음'
	        ELSE address2 
	    END AS address2
FROM address a LIMIT 10;


NULLIF()

MySQL에서 해당 Column의 값을 비교해서 두 값이 같다면 True 아니라면 expr1을 반환하고 만약 True라면 Null을 리턴한다.

  • Case When과 흡사하다.
  • if expr1 = expr2 is true, otherwise returns expr1. This is the same as CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END.
SELECT NULLIF(expr1, expr2) FROM 테이블명;

https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html#function_nullif

 

MySQL :: MySQL 8.0 Reference Manual :: 12.5 Flow Control Functions

12.5 Flow Control Functions Table 12.7 Flow Control Operators Name Description CASE Case operator IF() If/else construct IFNULL() Null if/else construct NULLIF() Return NULL if expr1 = expr2 CASE value WHEN compare_value THEN result [WHEN compare_value

dev.mysql.com


-- 1과 1은 True이므로 Null을 리턴한다.
SELECT NULLIF(1,1);
-> NULL

-- 1과 2는 False이므로 expr1인 1을 리턴한다.
SELECT NULLIF(1,2);
 -> 1

 

반응형

'DB > MySQL' 카테고리의 다른 글

[MySQL] FIRST_VALUE()  (0) 2023.01.18
[MySQL] SUM() OVER()함수  (0) 2023.01.17
[MySQL] LAG() 함수  (0) 2023.01.17
[MySQL] LEAD() 함수  (0) 2023.01.17
[MySQL] ROW_NUMBER() 함수  (0) 2023.01.17