MySQLでは、NULL値を NULLとして返したくない場合があります。 。 「N/A」、「Not Applicable」、「None」、さらには空の文字列「」など、別の値でNULL値を返したい場合があります。
幸い、MySQLでこれを行うにはいくつかの方法があります。
4つあります:
-
IFNULL()機能 -
COALESCE()機能 -
IF()IS NULLと組み合わせた関数 (またはIS NOT NULL)演算子 ケースコード>IS NULLと組み合わせた式 (またはIS NOT NULL)演算子
これらのオプションの例を以下に示します。
サンプルデータ
まず、いくつかのサンプルデータを取得しましょう:
USE Solutions; SELECT TaskCode From Tasks;
結果:
+----------+ | TaskCode | +----------+ | gar123 | | NULL | | NULL | | dog456 | | NULL | | cat789 | +----------+
したがって、3つのNULL値と3つの非NULL値があります。
IFNULL()関数
その名前を考えると、これはおそらくMySQLでNULL値を置き換えるための最も明白なオプションです。この関数は基本的にISNULL()と同等です SQLServerで。
IFNULL() 関数を使用すると、2つの引数を指定できます。最初の引数は、NULLでない場合にのみ返されます。 NULLの場合、代わりに2番目の引数が返されます。
IFNULL()の使用例を次に示します。 サンプルデータセットに対して:
SELECT IFNULL(TaskCode, 'N/A') AS Result FROM Tasks;
結果:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
ここでは、NULL値を N / Aに置き換えただけです。 。
COALESCE()関数
この関数は、 IFNULL()に似ています。 機能しますが、少し異なります。この関数はANSISQL規格に準拠しており、さまざまなRDBMSに広く展開されています。
それが機能する方法は、必要な数の引数を提供することです。 COALESCE() 次に、最初の非 NULLを返します リスト内の値、または NULL NULL以外がない場合 値。
このように:
SELECT COALESCE(TaskCode, 'N/A') AS Result FROM Tasks;
結果:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
したがって、以前とまったく同じ結果が得られます。
ただし、この関数との違いは、前述のように、引数のリストを提供できることです。 COALESCE() 関数は、最初のNULL以外の値のいずれかを取ります。
たとえば、 NULLを追加できます。 最初の引数としてNoneを配置します N / Aの前 何が起こるか見てみましょう:
SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result FROM Tasks;
結果:
+--------+ | Result | +--------+ | gar123 | | None | | None | | dog456 | | None | | cat789 | +--------+
最初のNULLをスキップしました 予想どおり、 TaskCodeのNULL値をスキップしました 列、 Noneに落ち着く前 。 N / A この場合、 None のため、値は使用されませんでした 最初に来て、それはNULL以外の値です。
IS NULL / IS NOT NULLと組み合わせたIF()関数
IS NULL およびISNOT NULL 演算子を使用すると、NULL値をテストし、結果に応じて異なる値を提示できます。
これらの演算子はIF()内で使用できます 関数であるため、NULL以外の値が返され、NULL値は選択した値に置き換えられます。
例:
SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result FROM Tasks;
結果:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
したがって、 IFNULL()の場合と同じ結果になります。 およびCOALESCE() 機能。
そしてもちろん、 IS NOT NULLを交換することもできます IS NULL 。その場合、後続の引数も入れ替える必要があります:
SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result FROM Tasks;
IS NULL / ISNOTNULLと組み合わせたCASE式
もう1つの方法は、 CASEを使用することです。 式:
SELECT
CASE
WHEN TaskCode IS NOT NULL THEN TaskCode
ELSE 'N/A'
END AS Result
FROM Tasks;
結果:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
前の例と同様に、これは IS NULLを使用するように書き直すことができます。 IS NOT NULLの代わりに :
SELECT
CASE
WHEN TaskCode IS NULL THEN 'N/A'
ELSE TaskCode
END AS Result
FROM Tasks;