PostgreSQLとMySQLでnull値だった場合に置換する方法をまとめた

1. PostgreSQL

null値を置換するにはCOALESCE関数を利用します。COALESCE関数はnullでない最初の引数を返します。


COALESCE(value [, ...])

SELECT COALESCE(col1, col2, 'is null')...

/*
  col1がnullでない場合、col1が返ります。
  col1がnullでcol2がnullでない場合、col2が返ります。
  col1、col2の両方がnullの場合は'is null'が返ります。
*/
COALESCE関数はCASE式の簡略表記です。内部的にはCASE式に変換されて処理されます。したがって、COALESCEを誤って使用すると、CASEに関連したエラーメッセージが表示されることがあります。

2. MySQL

null値を置換するにはIFNULL、COALESCE関数を利用します。

IFNULL関数はvalue1がnullでない場合はvalue1を返し、それ以外の場合はvalue2を返します。


IFNULL(value1,  value2)

SELECT IFNULL(col1, 'is null')...
/*
   col1がnullでない場合はcol1が返ります。
   col1がnullの場合は'is null'が返ります。
*/

COALESCE関数はnullでない最初の引数を返します。
PostgreSQLのCOALESCE関数と同じです。


COALESCE(value [, ...])

SELECT COALESCE(col1, col2, 'is null')...

/*
  col1がnullでない場合、col1が返ります。
  col1がnullでcol2がnullでない場合、col2が返ります。
  col1、col2の両方がnullの場合は'is null'が返ります。
*/

3. Oracle

null値を置換するには、NVL、COALESCE関数を利用します。

NVL関数はvalue1がnullでない場合はvalue1を返し、それ以外の場合はvalue2を返します。
MySQLのIFNULL関数と同じです。


NVL(value1,  value2)

SELECT NVL(col1, 'is null')...

/*
  col1がnullでない場合はcol1が返ります。
  col1がnullの場合は'is null'が返ります。
*/

COALESCE関数はnullでない最初の引数を返します。
PostgreSQLのCOALESCE関数と同じです。


COALESCE(value [, ...])

SELECT COALESCE(col1, col2, 'is null')...

/*
  col1がnullでない場合、col1が返ります。
  col1がnullでcol2がnullでない場合、col2が返ります。
  col1、col2の両方がnullの場合は'is null'が返ります。
*/

4. その他

  • 互換性重視ならCOALESCE関数を使用する。
  • MySqlのIFNULL関数とOracleのNVL関数は同じ。
  • COALESCE関数はすべての値がnullならnullが返る。null値になってほしくない場合は引数の最後に定数を指定する。
  • IFNULL関数とのNVL関数の引数がnullの場合はnullが返る。
  • 定数を指定する場合は、カラムの型にあった値を指定する。(number → 0、text → ‘文字列’)
  • null値を含んだカラムの並び替えについてはPostgreSQLとMySQLでnull値を含むカラムのソート方法を参照してください。