2014-03-07 42 views
0

在表中有3列:GivenName, FamilyName, MiddleName。我有所有的三個值的單個列追加到輸出這樣SQL Select查詢在追加字符串時返回NULL

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

但是,如果該列中的任意一個值是零,那麼整個輸出爲null。

任何方式,如果我可以檢查是否有任何列爲空之前追加?所以它不會被追加,而其他的不會被追加。

但我不能使用'where GivenName不爲null,FamilyName不爲null'的情況。

我只是不想附加空字符串。 對於防爆:

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

然後輸出應爲:MARK約瑟夫代替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) =>輸出空 )

+0

[與空SQL服務器字符串連接(http://stackoverflow.com/questions/2916791/sql-server-string-concatenation-with-null) –

回答

1

可以使用isnull功能簡單地輸出,如果列是空空字符串:

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

我不完全相信你應該做的這在數據庫中...這似乎像一個表達層關注我。

+0

謝謝。有效! – Maltesh

2

這樣做:

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

COALESCE會做空檢查第一個參數。如果爲空則返回第二個參數

+0

的可能重複+1使用COALESCE,符合ANSI標準。 – DMason

+0

它工作!謝謝 – Maltesh

0

上串聯做這種的方式是

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

而且很明顯,你可以使用上下功能在適當情況下。

0

大概就是這個樣子

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

您不需要使用CONCAT函數替換NULL。試試這個select concat(null,'abc',null)。 – msi77