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

MySQLでNULLを別の値に置き換える4つの方法

    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;
    

    1. SSISパッケージを使用してSQLServerからExcelおよびテキストファイルにデータをエクスポートする

    2. レイアウトビューのフィルターを使用してMicrosoftAccessレポートを実行する時間を節約する

    3. SASJMPをSalesforce.comに接続する

    4. SQLServer2019でのデータベースリカバリの高速化