2015-01-12 50 views
0

我的數據是這樣的:MySQL的選擇,連接具有分隔

 
id name age gender 
1 abc   M 

'年齡' 值爲null。

我想連接列值與分隔符'\ n',如果一個列值爲空,那麼也可以用'\ n'來表示它。

我試過concat_ws,但它只返回:

 
1\nabc\nM 

我要的是:

1\nabc\n\nM

這是它應該是2'\ n 'ABC' 之後。

我該如何達到我的要求?

回答

0

你應該使用IFNULL(列名, '')來替代它不會Concat的那個值包含空字符的空列,並嘗試concat_ws。

select concat_ws('\n',id,name,ifnull(age,''),gender) from table1; 

SQL小提琴鏈接:如果`age`是`null` http://sqlfiddle.com/#!2/12074/10

+0

,因爲我們不知道哪列有空值,所以我們必須在解決方案的每一列中使用'ifnull',如'select concat_ws('\ n',id,ifnull(name,''),ifnull年齡''),ifnull(gender,'')from table1'。實際上,我們的表格有很多列,所以每列都有很多'ifnull',看起來很複雜,不太清晰。你有什麼更好的想法嗎? – frank

+0

函數通常不接受動態列。在這種情況下,ifnull只能逐一應用於列。 – Logan

0
select concat_ws('\n', id, coalesce(name,''), coalesce(age,''), coalesce(gender,'')) 
from your_table 
+1

不說回報'null'? –

+0

@juergen d,這個工程。但實際上我們有很多列,所以如果我們爲每列添加'coalesce',看起來這個sql語句很複雜並且不清晰。你有更好的主意嗎? – frank

0

無需使用CONCAT_WS,如果是null.use CONCAT + IFNULL函數

select concat('\n', ifnull(id,''),ifnull(name,''),ifnull(age,''),ifnull(gender,'')) 
from your_table 
+0

使用'concat_ws'返回'1 \ nabc \ nM',但我希望它返回'1 \ nabc \ n \ nM'('abc'後面有2'\ n')。 – frank

+0

那麼不需要使用concat_ws使用concat和isnull函數。 –