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;