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');

[実行結果]
COALESCE 関数の使い方 1

前からチェックしていって、最初に NULL ではない 'ABC' が戻り値として返っています。


次の例では、データ型の違う入力引数の値を COALESCE 関数に渡してみます。

DECLARE @Value1 INT,
        @Value2 INT = 2,
        @Value3 VARCHAR(1) = '3';

SELECT COALESCE(@Value1, @Value2, @Value3);

[実行結果]
COALESCE 関数の使い方 2

この例では、第 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);

[実行結果]
COALESCE 関数の使い方 3

この例では、第 1、第 3 引数には INT 型、第 2 引数には VARCHAR 型の数字を渡しています。

INT 型のほうが、VARCHAR 型よりも優先順位が高いので、戻り値の方は INT 型になります。

ですが、最初に NULL ではない値が、第 2 引数の @Value2 の 'a' で、それを INT 型に変換しようとしてエラーになっています。

SQL Server のデータ型の優先順位についてはこちらをご覧ください。「SQL Server のデータ型の優先順位と注意点

また、意味がないのでやらないとは思いますが、以下のよう引数に全部 NULL と渡したらエラーになります。

SELECT  COALESCE (NULL, NULL, NULL);

[実行結果]
COALESCE 関数の使い方 5


NULL の定数ではなく、変数で入力引数を指定して、値が全部 NULL の場合は NULL が戻り値として返ります。

DECLARE @Value1 INT,
        @Value2 INT,
        @Value3 INT;

SELECT COALESCE(@Value1, @Value2, @Value3);

[実行結果]
COALESCE 関数の使い方 6


以上、SQL Server の COALESCE 関数の基本的な使い方と注意点をご紹介しました。

© 2010-2025 SQL Server 入門