附加字符串时,SQL Select Query返回NULL

时间:2014-03-07 16:31:40

标签: sql sql-server

在表格中,有3列:GivenName, FamilyName, MiddleName。我必须附加所有三列值来输出像这样的单个列

Select Upper(GivenName) + FamilyName + Upper(MiddleName) as PersonName.....

但是如果列中任何一列的值为null,则整个输出为Null。

如果我可以在追加之前检查是否有任何列为空?这样它就不会被追加,而其他非空的则会被追加。

但我不能使用'其中GivenName不为null,FamilyName不为null'条件。

我只是想要追加null的字符串。 对于Ex:

If GivenName = 'Mark', 
   FamilyName = 'Joseph',
   MiddleName is null

然后输出应该是:MARK Joseph而不是NULL,它没有附加MiddleName,因为它是Null。

(但在SQL中输出为NULL。试试这个..

declare @FirstName nvarchar(20);
declare @GivenName nvarchar(20);
declare @MiddleName nvarchar(20);
set @FirstName = 'Steve';
set @GivenName = 'Hudson';
set @MiddleName = null;

select Upper(@FirstName) + @GivenName + UPPER(@MiddleName) =>输出空 )

4 个答案:

答案 0 :(得分:2)

这样做:

Select COALESCE(Upper(GivenName), '') + COALESCE(FamilyName, ' ') + COALESCE(Upper
(MiddleName), '') as PersonName

COALESCE将对第一个参数进行空检查。如果为null,则返回第二个参数

答案 1 :(得分:1)

如果列为null,您可以使用isnull函数简单地输出空字符串:

Select Upper(isnull(GivenName, '')) + isnull(FamilyName,'') + Upper(isnull(MiddleName,'')) as PersonName

我不完全确定你应该在数据库中这样做......这对我来说似乎是一个表示层。

答案 2 :(得分:0)

在连接中执行此类操作的方法是

SELECT ISNULL(FirstName + ' ', '') 
               + ISNULL(MiddleName + ' ', '') 
                          + ISNULL(LastName, '')

显然你可以在适当的时候使用UPPER和LOWER功能。

答案 3 :(得分:0)

可能喜欢这个

SELECT CONCAT(ISNULL(FirstName, ''),ISNULL(MiddleName, ''),ISNULL(LastName, ''))
AS FullName FROM testtable