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()
返します。