Sql server 2005 如何使用T-SQL正确连接列?

Sql server 2005 如何使用T-SQL正确连接列?,sql-server-2005,tsql,Sql Server 2005,Tsql,我在一个表的多个列中有一个地址 SELECT FirstName, LastName, StreetAddress, City, Country, PostalCode FROM Client 我试图使用逗号作为分隔符将地址相关列连接到一个字段中,但如果任何列(如City)为null或空,则不应使用逗号 如何像在c中一样在TSQL中使用三元运算符? 或者向我推荐最佳实践 谢谢看看isnull 您还可以查看使用合并函数,请在BOL中查找: 返回第一个非空表达式 在它的论点中 最后,您可以做的另

我在一个表的多个列中有一个地址

SELECT FirstName, LastName, StreetAddress, City, Country, PostalCode 
FROM Client
我试图使用逗号作为分隔符将地址相关列连接到一个字段中,但如果任何列(如City)为null或空,则不应使用逗号

如何像在c中一样在TSQL中使用三元运算符? 或者向我推荐最佳实践

谢谢

看看isnull

您还可以查看使用合并函数,请在BOL中查找:

返回第一个非空表达式 在它的论点中

最后,您可以做的另一件事是使用CASE函数

SELECT Address1, CASE Address2 IS NOT NULL THEN "," + Address2 ELSE...
Select Stuff(
    Coalesce(',' + FirstName,'')
    + Coalesce(',' + LastName,'')
    + Coalesce(',' + StreetAddress,'')
    + Coalesce(',' + City,'')
    + Coalesce(',' + Country,'')
    + Coalesce(',' + PostalCode ,'')
    , 1, 1, '')
From Client
你可以用


当您将任何内容连接为null时,它将返回null。所以我尝试将一个逗号和给定的列值连接起来,如果该表达式返回null,我将使用Coalesce返回一个空字符串。最后,如果我得到一个值,整个结果将以逗号开始。所以我用Stuff函数删除了逗号

SELECT Address1, CASE Address2 IS NOT NULL THEN "," + Address2 ELSE...
Select Stuff(
    Coalesce(',' + FirstName,'')
    + Coalesce(',' + LastName,'')
    + Coalesce(',' + StreetAddress,'')
    + Coalesce(',' + City,'')
    + Coalesce(',' + Country,'')
    + Coalesce(',' + PostalCode ,'')
    , 1, 1, '')
From Client
如果您只需要地址,那么显然您只需要包含以下列:

Select FirstName, LastName
    , Stuff(
        Coalesce(',' + StreetAddress,'')
        + Coalesce(',' + City,'')
        + Coalesce(',' + Country,'')
        + Coalesce(',' + PostalCode ,'')
    , 1, 1, '')
From Client

另一个解决方案是使用ISNULL

Select FirstName, LastName
    , ISNULL(StreetAddress+', ','')
      +ISNULL(City+', ','')
      +ISNULL(Country+', ','')
      +ISNULL(PostalCode,'')
FROM Client
如果值为null,则连接结果将为null。ISNULL将用第二个表达式替换第一个表达式

如果在COALESCE函数中包含NULLIF函数,它将正确地用于空列和空列


这是一个老问题,SQL 2012添加了CONCAT函数,使这类事情变得更简单。试试这个:

Select FirstName, LastName, 
    Stuff(
        Concat(
        ',' + FirstName,
        ',' + LastName,
        ',' + StreetAddress,
        ',' + City,
        ',' + Country,
        ',' + PostalCode ),
    1,1,'')
From Client

CONCAT将自动将NULL视为空字符串,因此您不需要使用ISNULL或COALESCE。STUFF函数用于删除第一个逗号,如Thomas的答案所示,谢谢。但是添加所有找到的列StreetAddress、City、Country、PostalCode对我来说真的很难??我将如何使用这个CASE语句?@User:use SELECT City1+ISNULLCity2?:,City2绝对不是有效的TSQL。@Martin-很抱歉,这是SSIS。但是其余的应该是有效的。+1,再次学习:但是你应该从中删除first-/lastname,因为我认为OP只想连接地址。NULLIF,酷!然后您可以添加一个LTRIM和RTRIM来删除任何空格,以获得COALESCE','+NULLIFRTRIMLTRIMStreetAddress,