T-SQL - COALESCE 関数の使い方と注意点
COALESCE 関数の使い方と注意点
この記事では、SQL Server の COALESCE 関数の基本的な使い方と注意点をご紹介します。
COALESCE 関数の基本的な使い方
SQL Server の COALESCE 関数は、渡した引数の中で、最初に NULL ではない値を返す関数です。
COALESCE 関数の基本構文は以下の通りです。
COALESCE ( 値1 [, 値2, 値3, ... 値n ] )
COALESCE 関数は、前の 値1 から順番に値を確認していき、一番最初に NULL ではない値を戻り値として返します。
値1 ~ 値n にはどんなデータ型の値でも指定できますし、それぞれ違ったデータ型の値も指定できますが、後述しますが少し注意が必要です。
戻り値のデータ型は、入力引数のデータ型の中で一番優先順位の高いデータ型になります。
それでは、COALESCE 関数を使って、最初の NULL でない値を取得してみます。
SELECT COALESCE(NULL, NULL, 'ABC', 'ZZZ');
[実行結果]
前からチェックしていって、最初に NULL ではない 'ABC' が戻り値として返っています。
次の例では、データ型の違う入力引数の値を COALESCE 関数に渡してみます。
DECLARE @Value1 INT, @Value2 INT = 2, @Value3 VARCHAR(1) = '3'; SELECT COALESCE(@Value1, @Value2, @Value3);
[実行結果]
この例では、第 1、第 2 引数には INT 型、第 3 引数には VARCHAR 型の数字を渡しています。
前からチェックしていって、最初に NULL ではない @Value2 の 2 が戻り値として返っています。
COALESCE 関数の注意点
先ほど、COALESCE 関数の入力引数の値1 ~ 値n には、それぞれ違ったデータ型の値も指定できますと書きました。
ただ、違ったデータ型を指定する場合には、注意しないといけない点があります。
それは、戻り値のデータ型は、入力引数のデータ型の中で一番優先順位が高いデータ型になるという点です。
最初に NULL でなかった値が戻り値として返される際に、優先順位が一番高いデータ型に変換できないとエラーになってしまいます。
例えばこんなケースです。
DECLARE @Value1 INT, @Value2 VARCHAR(1) = 'a', @Value3 INT = 3; SELECT COALESCE(@Value1, @Value2, @Value3);
[実行結果]
この例では、第 1、第 3 引数には INT 型、第 2 引数には VARCHAR 型の数字を渡しています。
INT 型のほうが、VARCHAR 型よりも優先順位が高いので、戻り値の方は INT 型になります。
ですが、最初に NULL ではない値が、第 2 引数の @Value2 の 'a' で、それを INT 型に変換しようとしてエラーになっています。
また、意味がないのでやらないとは思いますが、以下のよう引数に全部 NULL と渡したらエラーになります。
SELECT COALESCE (NULL, NULL, NULL);
[実行結果]
NULL の定数ではなく、変数で入力引数を指定して、値が全部 NULL の場合は NULL が戻り値として返ります。
DECLARE @Value1 INT, @Value2 INT, @Value3 INT; SELECT COALESCE(@Value1, @Value2, @Value3);
[実行結果]
以上、SQL Server の COALESCE 関数の基本的な使い方と注意点をご紹介しました。