ISNULLとCOALESCEは動作が異なる

ISNULLとCOALESCEは動作が異なります。

その違いを解説します。

スポンサーリンク

ISNULLとCOALESCEは動作が異なるので注意が必要

SQLを見ているとCOALESCEという関数を使用している箇所を見つました。

調べると、引数(カラムや式)を前から順番に解析し「NULL」でないものを発見したらその値を返してくれるようです。

COALESCEの基本動作

COALESCEは引数(カラムや式)を前から順番に解析し「NULL」を返す。

を実行すると

COALESCEの戻り値
ここまで全部NULL

が返って来ます。

を実行すると最初のNULLでない値

COALESCEの戻り値
ZZZ

が返ってきます。

ISNULLとの違い

SQLServerで使用できるISNULL関数のチェックする値(引数)が複数バージョンかと思いきや注意が必要で、ISNULL関数とCOALESCE関数では戻り値の型が異なります。

ISNULL関数の説明文には


構文
ISNULL( check_expression , replacement_value )
戻り値
check_expression と同じ型を返します。

とあり、COALESCE関数の説明文には

構文
COALESCE( expression [ ,…n ] )
戻り値
expression のデータ型のうち、最も優先順位が高いものを返します。


とあります。

つまり

は「’A’」という結果をVARCHAR型で受け取れますが、

となり実行時エラーになります。
これはデータ型の優先順位が「VARCHAR < INT」のため 'A'をデータ型の優先順位が高いINTに変換しようとしてエラーになった結果です。 上記のSQLは

と修正すれば「'A'」という結果を取得できます。

タイトルとURLをコピーしました