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

SQL ServerでNULLを別の値に置き換える方法– ISNULL()

    SQL Serverデータベースにクエリを実行するときに、結果セットにnull値を返したくない場合があります。そして、あなたがそれらを返して欲しい時があるかもしれません。ただし、別の値として返してほしい場合もあります。

    それがISNULL() 関数はのためです。

    ISNULL() NULLを置き換えることができるT-SQL関数です。 選択した値を指定してください。

    小さな結果セットを返す基本的なクエリは次のとおりです。

    SELECT TaskCode AS Result
    FROM Tasks;
    

    結果:

    Result
    ------
    cat123
    null  
    null  
    pnt456
    rof789
    null  
    

    null値を含む3つの行があることがわかります。

    null値をそのように表示したくない場合は、ISNULL()を使用できます。 nullを置き換える 別の値で。

    このように:

    SELECT ISNULL(TaskCode, 'N/A') AS Result 
    FROM Tasks;
    

    結果:

    Result
    ------
    cat123
    N/A   
    N/A   
    pnt456
    rof789
    N/A   
    

    空の文字列に置き換えることもできます:

    SELECT ISNULL(TaskCode, '') AS Result 
    FROM Tasks;
    

    結果:

    Result
    ------
    cat123
          
          
    pnt456
    rof789
            
    

    ISNULL()に注意してください 2番目の引数は、最初の引数のデータ型に暗黙的に変換できる型である必要があります。これは、最初の引数のデータ型を使用して結果を返すためです。

    ヌル行が消えないようにする

    結果セットからnull値が削除されるT-SQL関数がいくつかあります。このような場合、null値はまったく返されません。

    これは望ましい結果である場合もありますが、データが返された後のデータの処理方法によっては、悲惨な場合もあります。

    このような関数の一例は、STRING_AGG()です。 。この関数を使用すると、結果セットを区切りリストとして返すことができます。ただし、結果セットからnull値も削除されます。したがって、上記のサンプルデータでこの関数を使用すると、6つではなく3つの結果になります。

    SELECT STRING_AGG(TaskCode, ', ') AS Result 
    FROM Tasks;
    

    結果:

    Result                
    ----------------------
    cat123, pnt456, rof789

    したがって、null値を含む3つの行は返されません。

    多くの場合、結果セットがnull値で乱雑にならないため、これは完璧な結果です。ただし、データの用途によっては、これによって問題が発生する可能性もあります。

    したがって、null値の行を保持する場合は、ISNULL()を使用できます。 null値を別の値に置き換えるには:

    SELECT STRING_AGG(ISNULL(TaskCode, 'N/A'), ', ') AS Result 
    FROM Tasks;
    

    結果:

    Result                                        
    -------------------------------------
    cat123, N/A, N/A, pnt456, rof789, N/A

    COALESCE()関数

    ISNULL() 関数はCOALESCE()と同じように機能します 働き。したがって、上記のコードを次のように置き換えることができます:

    SELECT STRING_AGG(COALESCE(TaskCode, 'N/A'), ', ') AS Result 
    FROM Tasks;
    

    そして同じ結果が得られます:

    Result                                        
    -------------------------------------
    cat123, N/A, N/A, pnt456, rof789, N/A

    ただし、2つの関数の動作にはいくつかの違いがあります。違いの詳細については、COALESCE()の比較をご覧ください。 およびISNULL() MicrosoftのWebサイトで。


    1. IDが一致しないsql行を別のテーブルから削除します

    2. TimescaleDBのパフォーマンス監視

    3. SQLServer2017でクエリを作成する

    4. SQLServer-UNPIVOTを使用してNULLを含める