DB/PostgreSQL

[PostgreSQL] COALESCE, NULLIF, SIGN, IS DISTINCT FROM

불곰1 2021. 2. 28. 19:41

COALESCE와 NULLIF 두 함수는 유사한 동작을 하는 것 같지만 실제로는 다른 결과를 유발합니다.

COALESCE

COALESCE(X, Y)는 첫 파라미터인 X가 NULL이라면 Y를 반환하고 그렇지 않으면 X를 반환합니다.

select coalesce(null, '123');
-- '123'
select coalesce('1', '123');
-- '1'

NULLIF

NULLIF(X, Y)는 X와 Y가 같다면 NULL을 반환하고 그렇지 않으면 X를 반환합니다.

select nullif('1', '1');
-- null
select nullif('1', '2');
-- 1
select nullif(null, null);
-- null

SIGN

입력된 값이 양수면 1, 0이면 0, 음수면 -1을 반환합니다. 만약 null일 경우에는 null을 반환합니다.

select sign(123);
-- 1
select sign(0);
-- 0
select sign(-123);
-- -1
select sign(null);
-- null

IS DISTINCT FROM

어떤 값을 비교할 때 != 나 <> 연산자를 사용해 비교를 합니다.






SELECT *
FROM temp_table
WHERE address != '서울';
-- 또는 WHERE address <> '서울';


 


 




하지만 위 레코드 중 NULL이 존재하면 비교가 제대로 발생하지 않습니다. 이때 IS DISTINCT FROM 연산자를 사용해 쉽게 쿼리문을 만들 수 있습니다.

SELECT *
FROM temp_table
WHERE address IS DISTINCT FROM '서울';

-- 아래는 IS DISTINCT FROM 와 동일한 쿼리

SELECT *
FROM temp_table
WHERE address != '서울' OR address IS NULL;