web-dev-qa-db-ja.com

2つのデータベース列を1つの結果セット列に連結します

次のSQLを使用して、1つのテーブルの複数のデータベース列を結果セットの1つの列に連結します。

SELECT (field1 + '' + field2 + '' + field3) FROM table1

フィールドの1つがnullの場合、連結式全体の結果がnullになります。どうすればこれを克服できますか?

データベースはMS SQL Server 2008です。ところで、これはデータベース列を連結する最良の方法ですか?これを行う標準SQLはありますか?

46
jilt3d

これを行う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
44
Steve Prentice

SQL 2012以降を使用している場合、CONCAT関数を使用できます。

SELECT CONCAT(field1, field2, field3) FROM table1

NULLフィールドは連結を壊しません。

@bummi-コメントをありがとう-それに対応するために私の答えを編集しました。

38
BornToCode

NULLを使用した通常の動作では、NULLを含むすべての操作でNULLが生成されます...

- 9 * NULL  = NULL  
- NULL + '' = NULL  
- etc  

これを克服するには、ISNULLまたはCOALESCEを使用して、NULLのインスタンスを別のものに置き換えます。

SELECT (ISNULL(field1,'') + '' + ISNULL(field2,'') + '' + ISNULL(field3,'')) FROM table1
14
MatBailie

NULL値に問題がある場合は、COALESCE関数を使用して、NULLを選択した値に置き換えます。クエリは次のようになります。

SELECT (COALESCE(field1, '') + '' + COALESCE(field2, '') + '' + COALESCE(field3,'')) FROM table1

http://www.codeproject.com/KB/database/DataCrunching.aspx

5
IAmTimCorey

ISNULLを使用してそれを克服してください。

例:

SELECT (ISNULL(field1, '') + '' + ISNULL(field2, '')+ '' + ISNULL(field3, '')) FROM table1

これにより、NULLコンテンツが空の文字列に置き換えられ、連結操作が全体的なNULL結果として評価されないようにします。

4
Brian Scott

ちょうどVarcharとして列をキャスト(サイズ)

両方の列が数値の場合、以下のコードを使用します。

例:

Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table

col3のサイズは40またはそれ以外のサイズになります

1
raman

両方の列が数値の場合、このコードを使用

ちょうどVarcharとして列をキャスト(サイズ)

例:

Select (Cast(Col1 as Varchar(20)) + '-' + Cast(Col2 as Varchar(20))) As Col3 from Table
1
Pramod Pandav