sql >> データベース >  >> RDS >> SQLite

SQLiteのNullIf()とIfNull()の違い

    SQLiteにはnullif()という関数があります およびifnull()と呼ばれる別の関数 、それぞれが異なる目的を果たします。

    • nullif() 特定の値をNULLとして扱うことができます。 「…の場合はNULLを返す」と考えることができます。
    • ifnull() NULL値を別の値に置き換えることができます。 「NULLの場合は…」と考えることができます。

    したがって、基本的には互いに反対のことをします。 1つはNULL値を別の値に置き換え、もう1つは別の値をNULLに置き換えます。

    場合によっては、両方の関数が同じ結果を返すことがあります。例:

    SELECT
      nullif(1, 2),
      ifnull(1, 2);

    結果:

    nullif(1, 2)  ifnull(1, 2)
    ------------  ------------
    1             1           

    nullif() 関数は、引数が異なる場合は最初の引数のコピーを返し、引数が同じ場合はNULLを返します。この場合、引数は異なり、最初の引数を返します。

    ifnull() 一方、関数は、最初のNULL以外の引数のコピーを返します。この場合、両方の引数がNULL以外であったため、最初の引数が返されました。

    次の例では、これら2つの機能の違いがわかり始めます。

    SELECT
      nullif(1, 1),
      ifnull(1, 1);

    結果:

    nullif(1, 1)  ifnull(1, 1)
    ------------  ------------
                  1           

    nullif() 両方の引数が同じである場合、関数はNULLを返します。この場合、両方の引数は同じであるため、nullif() その仕事をして、NULLを返しました。

    ifnull() 関数は最初の非NULL引数を返すため、この場合は最初の引数を返しました。

    両方の引数が同じであるという事実は、ifnull()にとって何の意味もありません。 。 NULL以外の最初の引数を返すだけです。そうは言っても、両方の引数がNULLの場合、NULLを返します。

    いくつかのNULLを追加してみましょう。

    SELECT
      nullif(NULL, 1),
      ifnull(NULL, 1);

    結果:

    nullif(NULL, 1)  ifnull(NULL, 1)
    ---------------  ---------------
                     1              

    この場合、nullif() NULLが最初の引数であるため、NULLが返されました(nullif()であることを思い出してください。 両方の引数が異なる場合は、最初の引数を返します)。

    ifnull() 一方、最初のNULL以外の引数を返しました。

    引数を入れ替えると次のようになります。

    SELECT
      nullif(1, NULL),
      ifnull(1, NULL);

    結果:

    nullif(1, NULL)  ifnull(1, NULL)
    ---------------  ---------------
    1                1              
    >

    両方の引数が異なるため、nullif() 最初の引数を返します。

    最初の引数はNULLではないため、ifnull() 返します。


    1. SQLiteサブクエリ

    2. MySQLデータ型の概要

    3. OracleでSYSDATEのUTC値を取得する方法

    4. PostgreSQLでビューを作成する方法