-
[PostgreSQL] COALESCE, NULLIF, SIGN, IS DISTINCT FROMDB/PostgreSQL 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;