我的數據是這樣的:MySQL的選擇,連接具有分隔
id name age gender 1 abc M
'年齡' 值爲null。
我想連接列值與分隔符'\ n',如果一個列值爲空,那麼也可以用'\ n'來表示它。
我試過concat_ws
,但它只返回:
1\nabc\nM
我要的是:
1\nabc\n\nM
這是它應該是2'\ n 'ABC' 之後。
我該如何達到我的要求?
我的數據是這樣的:MySQL的選擇,連接具有分隔
id name age gender 1 abc M
'年齡' 值爲null。
我想連接列值與分隔符'\ n',如果一個列值爲空,那麼也可以用'\ n'來表示它。
我試過concat_ws
,但它只返回:
1\nabc\nM
我要的是:
1\nabc\n\nM
這是它應該是2'\ n 'ABC' 之後。
我該如何達到我的要求?
你應該使用IFNULL(列名, '')來替代它不會Concat的那個值包含空字符的空列,並嘗試concat_ws。
select concat_ws('\n',id,name,ifnull(age,''),gender) from table1;
SQL小提琴鏈接:如果`age`是`null` http://sqlfiddle.com/#!2/12074/10
select concat_ws('\n', id, coalesce(name,''), coalesce(age,''), coalesce(gender,''))
from your_table
不說回報'null'? –
@juergen d,這個工程。但實際上我們有很多列,所以如果我們爲每列添加'coalesce',看起來這個sql語句很複雜並且不清晰。你有更好的主意嗎? – frank
無需使用CONCAT_WS,如果是null.use CONCAT + IFNULL函數
select concat('\n', ifnull(id,''),ifnull(name,''),ifnull(age,''),ifnull(gender,''))
from your_table
使用'concat_ws'返回'1 \ nabc \ nM',但我希望它返回'1 \ nabc \ n \ nM'('abc'後面有2'\ n')。 – frank
那麼不需要使用concat_ws使用concat和isnull函數。 –
,因爲我們不知道哪列有空值,所以我們必須在解決方案的每一列中使用'ifnull',如'select concat_ws('\ n',id,ifnull(name,''),ifnull年齡''),ifnull(gender,'')from table1'。實際上,我們的表格有很多列,所以每列都有很多'ifnull',看起來很複雜,不太清晰。你有什麼更好的想法嗎? – frank
函數通常不接受動態列。在這種情況下,ifnull只能逐一應用於列。 – Logan