ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [PostgreSQL] COALESCE, NULLIF, SIGN, IS DISTINCT FROM
    DB/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;

    댓글