SQLServer ISNULLとCOALESCEはどう違うのか

更新:2017.10.14 views:3731

目次

NULLを何か別の値に置き換えたいとき、ISNULLを使う方法と、COALESCEを使う方法がありますが、どちらを使うのが良いか考えてみたいと思います。

ISNULLはどういう動きなのか

ISNULL ( check_expression , replacement_value )

戻り値の型:replacement_valueを暗黙の型変換で、check_expression と同じ型に変換して返す。

COALESCEはどういう動きなのか

COALESCE ( expression [ ,...n ] ) 

戻り値の型:expression のデータ型のうち、最も優先順位が高いものを返します。

ISNULLとCOALESCEの違い

isnullのときは下記のようなSQLならエラーになりません。

select
    isnull(col,0)
from (
    select '0' as col
    union all
    select 'a' as col
) tx

しかし、数字型のデータを含めるとエラーになります。

select
    isnull(col,0)
from (
    select '0' as col
    union all
    select 'a' as col
    union all
    select 0 as col
) tx

次にcoalesce()を使った場合ですが、aをintに変換できないためエラーになります。

select
    coalesce(col,0)
from (
    select '0' as col
    union all
    select 'a' as col
) tx

まとめ

結論になりますが、ISNULLかCOALESCEのどちらを使おうか迷ったら、より型に厳しいCOALESCEを使いましょう。

この方が、カラムに格納されているデータが何なのか意識せず、カラムの型だけを意識して対応すればよいので、 運用が始まって格納されているデータの想定が崩れてダメージを受けるようなことを防げるのではないでしょうか。

SQLServer関連記事



SQLServer varcharとnvarcharの違い
2017/11/26
 1125 views








これからブログなどのサイトを作りたいと思っている人は、お名前.comでのドメイン取得がオススメです。

■□━━ 急げ、ドメインは早い者勝ち! ━━□■
     ■お名前.com

アマゾンの2019年本屋大賞一覧

そして、バトンは渡された
ひと
ベルリンは晴れているか
熱帯
ある男

楽天市場のおすすめ商品一覧

お金2.0 新しい経済のルールと生き方 [ 佐藤航陽 ]
全部レンチン!やせるおかず 作りおき 時短、手間なし、失敗なし
「読む力」と「地頭力」がいっきに身につく 東大読書 [ 西岡 壱誠 ]