2015-01-12 53 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函数。 –