web-dev-qa-db-ja.com

SQLでNULL値と連結する

Column1      Column2
-------      -------
 Apple        juice
 water        melon
 banana
 red          berry       

2つの列を持つテーブルがあります。 Column1には単語のグループがあり、Column2にも単語のグループがあります。スペースなしで+演算子でそれらを連結したい。

たとえば、applejuice

問題は、2番目の列にnull値がある場合、結果として最初の要素のみを取得することです。

例:バナナ

Result
------
applejuice
watermelon
banana
redberry

ただし、column1 + column2を使用すると、Comunm2がNULLの場合、NULL値が返されます。結果として「バナナ」が欲しいです。

18
LuckySlevin

COALESCE関数を使用して、NULL値を空の文字列に置き換えます。

SELECT Column1 + COALESCE(Column2, '') AS Result
    FROM YourTable
38
Joe Stefanelli

unionを実行できます:

(SELECT Column1 + Column2 FROM Table1 WHERE Column2 is not NULL)
UNION
(SELECT Column1 FROM Table1 WHERE Column2 is NULL);
1
Chris Cooper

データベースとして何を使用しているかはわかりませんが、特定のSQLダイアレクトの「結合」関数を探してそれを使用します。

0
Chris E

TSQLの連結の+記号は、デフォルトで文字列+ nullを不明な値としてnullに結合します。

あなたは2つのことの1つを行うことができます、あなたはSQLがNullで何をすべきかを制御するセッションのためにこの変数を変更することができます

http://msdn.Microsoft.com/en-us/library/ms176056.aspx

または、連結する前に各列を空の文字列に結合することもできます。

COALESCE(Column1, '')

http://msdn.Microsoft.com/en-us/library/ms190349.aspx

0
Chris

標準SQLでは、NULLを含む文字列連結によりNULL出力が生成される必要がありますが、これは||操作を使用して記述されています。

SELECT a || b
  FROM SomeTable;

aまたはbのいずれか、あるいは両方にNULLが含まれている場合、出力はnullになります。

+を使用して文字列を連結することは、DBMS固有の拡張機能を使用していることを示します。動作は標準が要求するものと同じかもしれません-実際、それはあなたの質問の要点のようです。

一部のDBMS(特にOracle)は、null文字列を空の文字列と同等のものとして扱う傾向があります。その後、楽に連結できます。ただし、||演算子が使用されている場合、その動作は厳密に標準に準拠していません。

連結する前に、COALESCE、NVL、IFNULL、または同様の関数を使用して、NULLを空の文字列にマップすることを検討してください。

0

タグ付きのMSSQLを作成したいくつかの投稿は、モデレーターによって「SQL」に名前が変更されました。だから私はあなたがMSSQLを使用していると仮定しています

COALESCEは最初の非null値を返します。

SELECT COALESCE('a', NULL, 'c')

「a」のみを返します

Firstname + Lastnameが必要な場合は、一方または他方がNULLになることがありますが、CONCATを使用してください。 Concatは文字列を一緒に追加し、NULLSを長さ0のnull以外の値に置き換えます。

 SELECT CONCAT('a', NULL, 'c')

「ac」を返します

Fnスペース+ミドルネームスペース+ LNが必要な場合は、concatatinateとCONCATを組み合わせます。

SELECT CONCAT('a' + ' ', NULL + ' ', 'c')

「a c」を返します。

ミドルネーム(null)の後のスペースは、+とNULLで削除されます。

NULL + ''はnullです。

したがって、ミドルネームまたはファーストネームがnullの場合、余分な不要なスペースは得られません。

0

MySqを使用している場合は、ifnull(Column2、 '')を使用します

0
CapelliC

ケース条件を使用できます。

case when column_2 is not null 
     then concatenate
     else column_1
end
0
harsh