2011-05-06 67 views
2

对不起,如果这是对现有问题之一的重复(它很简单,但我无法弄清楚,我是新的)。如果将两个nvarchar行转换为一行,其中一行为空

我需要将一个表中的一些数据迁移到另一个表(不同的结构)。

表A具有Firstname和LastName列。 表B有名称列

我想做

SELECT Firstname + ' ' + LastName As Name FROM TableA 

但问题是,在表B中,某些行有名字或姓氏但不同时(懒惰用户)空值。

当我将它们导入到表B中时,查询失败,因为在我的新设计中Name列不可空,当我测试上述语句时,如果firstname或lastname为null,则concate值为null。

从我所做的阅读中,这是预期的行为,但我能做些什么来解决这个问题?

我想保存firstname或lastname,如果其他为空。

回答

4
SELECT RTRIM(LTRIM(ISNULL(Firstname ,'') + ' ' + ISNULL(LastName,''))) AS Name 
FROM TableA 
+1

处理前导或尾随空格的唯一答案... – gbn 2011-05-06 10:16:23

0

使用聚结或ISNULL

select COALESCE(FirstNAme, '') + ' ' + COALESCE(LastName, '') as name from TableA 
0
SELECT isnull (Firstname, '') + ' ' isnull (LastName, '') as Name 
FROM TableA 
1

这可以用一个colaesce完成(返回第一个非空)&没必要做手脚的空间。

select 
    coalesce(firstname + ' ' + lastname, firstname, lastname) 
from TableA