在SQL Server中与Null连接

时间:2016-05-11 14:13:04

标签: sql tsql concatenation

我在下面有一个简单的代码。

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_ 基本上,我的结果中有一个额外的_。

3 个答案:

答案 0 :(得分:4)

在应用IsNull函数之前,只需将下划线与可空列连接即可。

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

这需要将CONCAT_NULL_YIELDS_NULL选项设置为ON。 - 默认情况下是哪个,Microsoft强烈建议使用哪个。

答案 1 :(得分: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

答案 2 :(得分:0)

您可以使用COALESCE返回第一个非空表达式

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

或者如果您想在更深层次上自定义

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

整个解决方案依赖于SQL Server功能,如果任何连接字符串为null,则完整字符串将变为null。