NULL変換を行う場合にはISNULL、COALESCEの2種類の変換方法がある。
①ISNULLを使用する場合
■書き方等
ISNULL(第一引数, 第二引数)
ISNULLは第一引数がNULLの場合に第二引数の値を返す。 戻り値型は第一引数と同じ。
■使用例
テーブル名:[TEST_TBL1]
| column1 | column2 | column3 | column4 | 
| 1 | 列を | NULL | NULL | 
| 2 | NULL | 成せ汝 | NULL | 
| 3 | NULL | NULL | 従順の下僕 | 
| 4 | NULL | NULL | NULL | 
実行するSQL
  SELECT ISNULL(column1,'Big Brother') AS C1
       , ISNULL(column2,'Big Brother') AS C2
       , ISNULL(column3,'Big Brother') AS C3
       , ISNULL(column4,'Big Brother') AS C4
  FROM TEST_TBL1
実行結果
| C1 | C2 | C3 | C4 | 
| 1 | 列を | Big Brother | Big Brother | 
| 2 | Big Brother | 成せ汝 | Big Brother | 
| 3 | Big Brother | Big Brother | 従順の下僕 | 
| 4 | Big Brother | Big Brother | Big Brother | 
②COALESCEを使用する場合
■書き方等 COALESCE(第一引数, 第二引数, 第三引数, …)
COALESCEは第一引数から順番に評価を行い、NULLでない最初の引数を返す。
戻り値型は引数で使用されている型の中で型の優先度が高いものが使用される。
■使用例
テーブル名:[TEST_TBL1]
| column1 | column2 | column3 | column4 | 
| 1 | 列を | NULL | NULL | 
| 2 | NULL | 成せ汝 | NULL | 
| 3 | NULL | NULL | 従順の下僕 | 
| 4 | NULL | NULL | NULL | 
・例.1:第二引数まで指定する場合(ISNULL
実行するSQL
  SELECT COALESCE(column1, 'Big Brother') AS C1
       , COALESCE(column2, 'Big Brother') AS C2
       , COALESCE(column3, 'Big Brother') AS C3
       , COALESCE(column4, 'Big Brother') AS C4
  FROM TEST_TBL1
実行結果
| C1 | C2 | C3 | C4 | 
| 1 | 列を | Big Brother | Big Brother | 
| 2 | Big Brother | 成せ汝 | Big Brother | 
| 3 | Big Brother | Big Brother | 従順の下僕 | 
| 4 | Big Brother | Big Brother | Big Brother | 
・例.2:第三引数以降も指定した場合
実行するSQL
SELECT COALESCE(column2 , column3, column4, 'BigBrother') AS C1 FROM TEST_TBL1
実行結果
| C1 | 
| 列を | 
| 成せ汝 | 
| 従順の下僕 | 
| Big Brother | 
■ISNULLとCOALESCEの違い
引数に指定できる個数以外は同等にみえるが、
それぞれ変換後の型の扱いに違いがあることに注意が必要。
ISNULLは「第一引数と同じ」
COALESEは「引数で使用されている型の中で型の優先度が高いものが使用される」
例えば以下のようなSQLを実行した場合はCOALESEではエラーが発生することがある。
・ISNULLを使用した場合
 SELECT ISNULL('AAA' , 2) AS C1
| C1 | 
| AAA | 
・COALESCEを使用した場合
 SELECT COALESCE('AAA' , 2) AS C1
メッセージ 245、レベル 16、状態 1、行 1varchar の値 'AAA' をデータ型 int に変換できませんでした。
COALESCEを使用した場合はvarchar型の’AAA’を
型の優先度が高いint型に変換しようとしエラーが発生する。
0 件のコメント:
コメントを投稿