次のSQLを使用して、1つのテーブルの複数のデータベース列を結果セットの1つの列に連結します。
SELECT (field1 + '' + field2 + '' + field3) FROM table1
フィールドの1つがnullの場合、連結式全体の結果がnullになります。どうすればこれを克服できますか?
データベースはMS SQL Server 2008です。ところで、これはデータベース列を連結する最良の方法ですか?これを行う標準SQLはありますか?
これを行うSQL標準の方法は次のとおりです。
SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1
例:
INSERT INTO table1 VALUES ('hello', null, 'world');
SELECT COALESCE(field1, '') || COALESCE(field2, '') || COALESCE(field3, '') FROM table1;
helloworld
SQL 2012以降を使用している場合、CONCAT関数を使用できます。
SELECT CONCAT(field1, field2, field3) FROM table1
NULLフィールドは連結を壊しません。
@bummi-コメントをありがとう-それに対応するために私の答えを編集しました。
NULLを使用した通常の動作では、NULLを含むすべての操作でNULLが生成されます...
- 9 * NULL = NULL
- NULL + '' = NULL
- etc
これを克服するには、ISNULLまたはCOALESCEを使用して、NULLのインスタンスを別のものに置き換えます。
SELECT (ISNULL(field1,'') + '' + ISNULL(field2,'') + '' + ISNULL(field3,'')) FROM table1
NULL値に問題がある場合は、COALESCE関数を使用して、NULLを選択した値に置き換えます。クエリは次のようになります。
SELECT (COALESCE(field1, '') + '' + COALESCE(field2, '') + '' + COALESCE(field3,'')) FROM table1
ISNULLを使用してそれを克服してください。
例:
SELECT (ISNULL(field1, '') + '' + ISNULL(field2, '')+ '' + ISNULL(field3, '')) FROM table1
これにより、NULLコンテンツが空の文字列に置き換えられ、連結操作が全体的なNULL結果として評価されないようにします。
ちょうどVarcharとして列をキャスト(サイズ)
両方の列が数値の場合、以下のコードを使用します。
例:
Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table
col3
のサイズは40またはそれ以外のサイズになります
両方の列が数値の場合、このコードを使用
ちょうどVarcharとして列をキャスト(サイズ)
例:
Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table