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,