PostgreSQL-coalesce함수 (오라클 nvl함수 대체)

PostgreSQL-coalesce함수 (오라클 nvl함수 대체)

데이터를 조회할 시에 결과에 NULL 이 결과로 나오게 된다면 아주 당혹스러울 상황이 생기게 되는되요.
그때 사용할 수 있는 함수가 오라클에서는 nvl 함수, PostgreSQL에서는 coalesce함수를 대체하여 사용할 수 있습니다.

PostgreSQL coalesce 함수

우선 PostgreSQL coalesce함수를 예시를 들어본다면 아래와 같습니다.

1
2
3
4
5
6
7
-- COALESCE(A, B);
-- A값이 NULL일 경우 B로 반환합니다.

SELECT empno
, ename
, COALESCE(salary, 0) AS salary
FROM emp;

위와같이 조회한다면 COALESCE(salary, 0) AS salary 에서 salary(급여) 값이 NULL이 나온다면 무조건 0으로 표시할 수 있게됩니다.
좀 더 예시를 확인한다면 아래와 같습니다.

1
2
3
4
5
-- COALESCE(A, B, C);
-- A값이 NULL일 경우 B로 반환합니다. A와 B 모두 NULL일 경우 C로 반환합니다.

SELECT COALESCE(description, short_description, 'none')
FROM paint;

위의 상황에서 description에 NULL이라면 short_description의 결과를 가져오고 short_description 마저 NULL이라면 ‘none’이라는 결과를 가지고 올 수 있습니다.

Oracle NVL 함수

위의 쿼리를 오라클의 nvl을 사용하려면 아래와 같이 사용할 수 있습니다.

1
2
3
4
5
6
7
-- NVL(A, B);
-- A값이 NULL일 경우 B로 반환합니다.

SELECT empno
, ename
, NVL(salary, 0) AS salary
FROM emp;

Oracle NVL2 함수

오라클의 NVL2 함수는 NULL이 아닌 경우 지정값1을 출력하고, NULL인 경우 지정값2를 출력한다.

1
2
3
4
5
6
7
8
9
-- NVL2(A, B, C);
-- A값이 NULL이 아니라면 B로 반환, NULL일 경우 C로 반환합니다.
-- NVL2("값", "NOT NULL", "NULL")

SELECT empno
, ename
, NVL(salary, 0) AS salary
, NVL2(salary, 'Y', 'N') AS salary_yn
FROM emp;

여기서 NVL2(salary, 'Y', 'N') AS salary_yn 급여가 있을경우에는 ‘Y’ 없을 경우에는 ‘N’으로 결과가 조회되도록 만들 수 있었습니다.


Reference

Share