【SQL】INSERT文でNULLを置き換えて登録する方法


このページでは、ORACLEデータベースのSQLで、NULL値を置き換えてINSERTする方法を紹介します。

NULL値を別の値に変換して登録する方法はいくつかありますので順々に紹介していきます。

INSERT文のサンプルは↓で多数紹介していますので参考にしてください。
>>【SQL】INSERT文の書き方:サンプル多数あり

NULL値を置換してINSERTする方法

1.NVL関数を使ってNULLを置換する方法

NVL関数を使って、NULL値を変換する方法があります。

NVL(式1,式2)とすることで次の結果を返します。
 ・式1の値がNULLでない場合:式1を返します。
 ・式1の値がNULLの場合:NULLではなく、式2を返します。

次のサンプルでは、col2の値が、NULLの場合に0に置き換えてレコードを登録しています。

INSERT INTO tab1 SELECT col1,NVL(col2,0) FROM tab2;

2.NVL2関数を使ってNULLを置換する方法

NVL2という関数を使って、NULL値を置換する方法です。

NVL2(式1,式2,式3)とすることで次の結果を返します。
 ・式1の値がNULLでない場合:式2を返します。
 ・式1の値がNULLの場合:式3を返します。

次のサンプルでは、col2の値が、NULLでない場合は1、NULLの場合は0をINSERTしています。

INSERT INTO tab1 SELECT col1,NVL2(col2,1,0) FROM tab2;

3.CASE式を使ってNULLを置換する方法

CASE式を使って、列の値がNULLの場合に他の値を返すこともできます。

次のサンプルでは、col22の値がNULLでない場合は1、NULLの場合は0を返します。

INSERT INTO tab1 
SELECT
    col1
    ,CASE WHEN col2 IS NOT NULL THEN 1
          WHEN col2 IS NULL THEN 0
     END
FROM
     tab2;

4.COALESCE関数を使う方法

COALESCE関数は、引数のうち、NULLでない最初の引数を返します。

次のサンプルでは、col2がNULL、col3がNULLでない、col4がNULLでないの場合、最初のNULLでない引数であるcol3が返されます。

INSERT INTO tab1
SELECT col1,COALESCE(col2,col3,col4) FROM tab2;

まとめ

今回紹介したように、NULL値を置き換えしてINSERする方法はいくつかのパターンがあります。

最もよく使われるのは、NVLなので、まずはNVLの使い方をマスターしてみてください。

このほか、INSERT文には様々な書き方があります。
詳しくは「【SQL】INSERT文の書き方:サンプル多数あり」で解説しているのでぜひ参考にしてください。