sql组合了两个可能具有空值的列
这应该是一件容易做的事情,但我似乎一直得到额外的空间。基本上,我想做的是将多个列合并到一个列中。但这些列中的每一列也可能为null。当我合并它们时,我还希望它们之间有一个空格(“”) 我创建的是以下查询:sql组合了两个可能具有空值的列,sql,sql-server,null,Sql,Sql Server,Null,这应该是一件容易做的事情,但我似乎一直得到额外的空间。基本上,我想做的是将多个列合并到一个列中。但这些列中的每一列也可能为null。当我合并它们时,我还希望它们之间有一个空格(“”) 我创建的是以下查询: select 'All'= ISNULL(Name+' ','')+ISNULL(City+' ','')+ISNULL(CAST(Age as varchar(50))+' ','') from zPerson 结果是: All John Rock Hill 23 Munchen 2
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
有什么想法吗?围绕ISNULL()函数使用,或围绕整个选定术语使用
select 'All'= LTRIM(ISNULL(Name+' ','')+ISNULL(City+' ','')+ISNULL(CAST(Age as varchar(50))+' ','') from zPerson)
在您发布的数据中,
Name
列不包含空值。相反,它包含空字符串,因此ISNULL(Name+''',)
将求值到单个空格
最简单的解决方案是更改数据,使空字符串为null。这在你的情况下是合适的,因为这显然是你的意图
UPDATE zPerson SET Name=NULL WHERE Name=''
如果需要,对您的
City
和Age
字段重复此操作。哪个数据库管理系统………..我猜是它的sql server。。这听起来像是慷慨应用COALESCE()
和NULLIF()
COALESCE和isnull的一个例子,结果是一样的……这对他没有好处TRIM(ISNULL(Name+'',)
将删除他如此小心地添加的空格!对于最后一行,这对他没有帮助,它给出了Bob_uu27
(带2个空格)RB您是对的。。但他的解决方案让我想到在每个领域都使用ltrim。。所以他的解决方案解决了这个问题:我使用的最后一个查询是:从zPerson@RB是的,你是对的。。但是OP只想删除第一个额外的空格,这是我向他建议的。@Pranav重新阅读问题我同意你是对的-你确实回答了OPs的问题,所以+1:)+1是解决问题的解决方案,分两步完成。这将是一个很好的解决方案,但我的表有超过100万条记录……但是Pranav的解决方案是正确的,出于兴趣,为什么您有100万条记录这一事实阻止了这是一个好的解决方案?还要注意的是,这不是一个解决办法-这是正确的答案!如果你不知道某人的名字,你应该将其存储为NULL,否则你就声称他们的名字是一个空字符串-数据库都是关于语义的:)数据每天都来自不同的来源一些是NULL,一些是空字符串。。。我们每天谈论的是数百万条记录,每个记录都有40多个字段,因此我很抱歉没有提供更多详细信息……好吧,如果出于实际原因,您认为这不是正确的方法,那就足够了:)