2011-11-09 54 views
0

我有這個頭腦簡單的查詢:處理空字符串時,串聯Select語句

select a.str_number+' '+a.str_name+' '+a.str_suffix+' '+a.str_apt AS addr from mytable 

此查詢工作,只要沒有連接值是不是NULL。如果有任何爲空,則地址不顯示。

我嘗試這樣做:

select IsNULL(a.str_number+' '+a.str_name+' '+a.str_suffix+' '+a.str_apt AS addr,'') from table 

我想做到的是用空白空間來代替NULL值是否爲空,但我仍然得到任何值。

回答

0

使用COALESCE:

select a.str_number+' '+a.str_name+' '+COALESCE(a.str_suffix, '')+' '+a.str_apt AS addr from mytable 
+0

是啊,那其實就是我已經決定這樣做,但我擔心的是,它是否是最好使用COALESCE批發喜歡你了,或做單獨如:

select COALESCE(a.str_number,'')+' '+COALESCE(a.str_name,'')+' '+COALESCE(a.str_suffix, '')+' '+COALESCE(a.str_apt,'') AS addr from mytable
。這種方法有多昂貴? –

1

這是泰德Codd的規則,關係數據庫的結果。 As applied to MS SQL

理想情況下,任何使用NULL的操作都應該導致NULL。儘管過去有一些問題,由於某些SQLServer選項的存在決定了NULL是如何處理的(而不是以「確定的」方式處理它)。

  • ANSI_NULLS:如果OFF,則NULL = NULL爲True用於比較。如果ON(默認),NULL = NULL返回UNKNOWN(理想情況)。

  • CONCAT_NULL_YIELDS_NULL:如果ON,空值被視爲理想的方式。例如NULL + < numValue> = NULL。如果OFF,空值被以非標準方式使得NULL + <值> = <值>處理。 (做了按BOL的向後兼容性,這說明了一切)

空的基本意思是這樣的:我們不知道這個值,所以我們不應該曾經嘗試使用它。我相信SQL區分null和一個空字符串,所以我會存儲一個空字符串「」,如果這是我以後想要在串聯中使用。

+0

OK,謝謝主席先生,但我怎麼解決這個呢? –

+1

'ISNULL'其可以包含一個空值和連接結果的每一列。 –

1
SELECT 
ISNULL(a.str_number,'') + ' ' + 
ISNULL(a.str_name,'') + ' ' + 
ISNULL(a.str_suffix,'') + ' ' + 
ISNULL(a.str_apt,'') 
AS addr 
FROM mytable 

非常難看,但應該這樣做。