sql组合了两个可能具有空值的列

时间:2013-04-08 13:08:48

标签: sql sql-server null

这应该是一件容易的事,但我似乎不断获得额外的空间。基本上我要做的是将多列组合成一列。但是这些列中的每一列也可能为空。当我将它们组合起来时,我也希望它们用空格('')分隔。

我创建的是以下查询:

select 'All'= ISNULL(Name+' ','')+ISNULL(City+' ','')+ISNULL(CAST(Age as varchar(50))+' ','')  from zPerson

结果是:

All
John Rock Hill 23 
 Munchen 29 
Julie London 35 
 Fort Mill 27 
Bob  29 

如您所见:名称为null时有一个额外的空格。我不希望这样。

初始表是:

id  Name    City            Age InStates    AllCombined
1   John    Rock Hill       23  1              NULL
2           Munchen         29  0              NULL
3   Julie   London          35  0              NULL
4           Fort Mill       27  1              NULL
5   Bob                     29  1              NULL

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

select 'All'= LTRIM(ISNULL(Name+' ','')+ISNULL(City+' ','')+ISNULL(CAST(Age as varchar(50))+' ','')  from zPerson)

SEE LTRIM()

答案 1 :(得分:2)

在您发布的数据中,Name列不包含NULL。相反,它包含空字符串,因此ISNULL(Name+' ','')将转换为单个空格。

最简单的解决方案是更改数据,以便空字符串为空。这在你的情况下是合适的,因为这显然是你的意图。

UPDATE zPerson SET Name=NULL WHERE Name=''

如有必要,请对CityAge字段重复此操作。

答案 2 :(得分:0)

在ISNULL()函数周围使用TRIM(),或在整个所选术语周围使用LTRIM()