ISNULLとCOALESCEは動作が異なる

公開日: : 最終更新日:2013/12/11 SQL Server ,

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'」という結果を取得できます。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
  • 14 follow us in feedly

関連記事

no-img

SQLで月曜日始まりのカレンダー作成

カレンダー作成 SQLServerで月曜日始まりの1週間分のカレンダーを作成します。 実行す

記事を読む

no-img

0で埋めで固定長のデータにする

0で埋めで固定長のデータにする データべース内のデータを0埋めして取得します。 RIGHT(

記事を読む

no-img

2つのテーブルを結合して値を更新するSQL

2つのテーブルを結合して値を更新するSQL テーブルAの値をテーブルBの値で上書き(更新)するSQ

記事を読む

no-img

SQLでCASE~WHENを使ってみる(2)

CASE~WHENはSQLでCASE~WHENを使ってみるとは別に WHENの後に評価させる式を書

記事を読む

no-img

SQLServerのダミーテーブル

SQLServerでダミーテーブルを使う データベースサーバから現在時刻などを取得する場合など

記事を読む

no-img

SQLServerでsp_renameを使ってテーブルの列名を変更する

SQLServerで列名を変更するには sp_renameを使って列名を変更 SQLServ

記事を読む

no-img

SQLServerでテーブルの存在を確認する

データベース内のテーブル情報をから存在を確認する プログラムで動的にテーブルを作成したりする場合に

記事を読む

keybord_black

春分の日と秋分の日をSQLで求める計算式

春分の日と秋分の日は毎年違う 春分の日と秋分の日は 祝日としての春分の日・秋分の日は、 前

記事を読む

keybord_black

SQLで順位を取得するRANK()とDENSE_RANK()

SQLで順位を取得する SQLServerで項目の順位付け関数を利用して 順位をします。

記事を読む

benzu

SQLでビット演算を行う

SQLServerでのビット演算 SQLServerのT-SQLでビット演算を使って、該当のデータ

記事を読む

no-img
0で埋めで固定長のデータにする

0で埋めで固定長のデータにする データべース内のデータを0埋めして取

no-img
SQLServerでホスト名を取得する

SQLServerが動作しているホスト(サーバ)名取得 SQLSer

a0001_013635
テーブルから列を削除する「ALTER TABLE テーブル名 DROP COLUMN 削除する列名」

既存のテーブルから指定した列を削除する 既存のテーブルで不要になった

no-img
SQL Server-登録されているストアドプロシジャーの一覧を取得する

データベースに登録されているストアドプロシジャーの 一覧を取得します

no-img
ストアドプロシジャ内で例外エラーが発生した行番号を取得する。

例外エラーが発生した行番号を取得する SQLServerのストア

→もっと見る



PAGE TOP ↑