弁財天

ゴフマン「専門家を信じるのではなく、自分自身で考えて判断せよ」

nvl2の移植

Oracleのnvl2関数をPostgreSQLへ移植する
ふつうの解答

nvl関数:nvl(a, b) aがNULLでない時a、aがNULLの時bを戻す
nvl2関数:nvl2(a, a, b) aがNULLでない時a、aがNULLの時bを戻す

coalesce(a, b)は、最初のNULLでない値を返す

select nvl(a, b) from t;
select nvl2(a, a, b) from t;
select coalesce(a, b) from t;

select nvl2(a, b, c) from t;
select case when a is null then c else b end a from t;

こっちの解答のほうがおもろい

select nvl2(commission_pct,commission_pct,0)
 from employees;

select coalesce(commission_pct,0)
 from employees;

select case when commission_pct is null then 0
 else commission_pct end commission_pct
 from employees;

select decode(commission_pct, null, 0, commission_pct) commission_pct
 from employees;

select COALESCE( a, NULL ) || case when b is null then NULL else 'b found...' end as a from t;

COALESCE( a, NULL )とした場合、
aがNULLのときに、後続の||は無視され
カラムの戻り値がNULLになる PostgreSQL 7.4.25

select COALESCE( a, '' ) || case when b is null then '' when b = '' then '' else 'b found...' end as a from t;
のように''を使って空文字にすべき

投稿されたコメント:

コメント
コメントは無効になっています。