2016-05-11 7 views
2

私は以下の簡単なコードを持っています。SQL ServerのNullとの連結

Select columnA, columnB, columnC 
    From table. 

これは私の結果です。

 
ColumnA ColumnB ColumnC 
Apple G  null 
Juice S  T9 

さて、私は従う

Select 
    ColumnA + '_'+ ColumnB + '_' + ISNULL(ColumnC, '') as Name 
    From table 

私の出力は

 
Name 
Apple_G_ 
Juice_S_T9 

それはApple_Gの代わりApple_G_として表示されますので、どのように私は、上記の連結を修正するか、以下の通りであるとして連結を使用します 基本的に、私は私の結果から余分な_を持っています。

+0

'COALESCE()'や 'ISNULL()'の関数や条件が役に立ちます。 'CONCAT_NULL_YIELDS_NULL'オプションがONのとき、あなたは手動で' NULL'値を扱わなければなりません。そうすることが常に推奨されます。 – Pred

答えて

0

使用IIF(SQL Serverの2014+)またはCASE次のいずれか

IIF

Select 
    ColumnA + '_' + 
    ColumnB + 
    IIF(ColumnC IS NOT NULL, '_' + ColumnC, '') 
From table 

CASE

Select 
    ColumnA + '_' + 
    ColumnB + 
    CASE 
     WHEN ColumnC IS NOT NULL THEN '_' + ColumnC 
     ELSE '' 
    END 
From table 
+0

+ Mr.Dittmar、あなたの洞察に感謝します – joe

4

ただ、NULL可能coluとアンダースコアを連結あなたはIsNull関数を適用する前にmn。

Select 
    ColumnA + '_'+ ColumnB + ISNULL('_' + ColumnC, '') as Name 
    From table 

これは、CONCAT_NULL_YIELDS_NULLオプションがオンに設定されている必要があります。 - これはデフォルトであり、マイクロソフトから非常に強く推奨されています。

+0

私はこのまったく同じことを書こうとしていました。 –

+0

+ Mr.Phils、いつものように、非常に良い情報。ありがとう – joe

+0

'ANSI_NULLS'が何に設定されていても動作しますか?私は、 'x + null <> null'という設定があることを覚えていると思います。 –

0

あなたはそれが最初のNULLでない表現

Select COALESCE(ColumnA + '_'+ ColumnB + '_' + ColumnC, ColumnA + '_'+ ColumnB) as Name 
    From table 

を返しますか、あなたは、より深いレベルで

Select COALESCE(ColumnA + '_'+ ColumnB + '_' + ColumnC, 
       ColumnA + '_'+ ColumnB, 
       ColumnA) as Name 
    From table 

それをカスタマイズしたい場合は、ソリューション全体がSQLサーバーに依存していることをCOALESCEを使用することができます連結された文字列のいずれかがnullの場合、完全な文字列はnullになります。

+0

+ Mr。 Vergis、非常に便利なテクニック。ありがとうございます – joe

+0

'x + null == null'はいつもですか? –

+0

@ThorstenDittmarはい、このデフォルトの動作を変更する設定がありますが、この設定をオフにしてもDBが見つかりませんでした。 –