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サイトで。