Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql组合了两个可能具有空值的列_Sql_Sql Server_Null - Fatal编程技术网

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

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

这应该是一件容易做的事情,但我似乎一直得到额外的空间。基本上,我想做的是将多个列合并到一个列中。但这些列中的每一列也可能为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
有什么想法吗?

围绕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多个字段,因此我很抱歉没有提供更多详细信息……好吧,如果出于实际原因,您认为这不是正确的方法,那就足够了:)