MySQL选择,用分隔符连接

MySQL选择,用分隔符连接,mysql,select,concatenation,Mysql,Select,Concatenation,我的数据如下所示: id name age gender 1 abc M 我想要的是: 1\nabc\n\nM 1\nabc\n\nM 也就是说,在“abc”之后应该是2'\n' 如何实现我的要求?无需使用concat\u ws,如果该值为null,它将不会concat该值。请使用concat+ifnull函数 select concat_ws('\n', id, coalesce(name,''), coalesce(age,''), coalesce(ge

我的数据如下所示:

id name age gender 1 abc M 我想要的是:

1\nabc\n\nM 1\nabc\n\nM 也就是说,在“abc”之后应该是2'\n'


如何实现我的要求?

无需使用concat\u ws,如果该值为null,它将不会concat该值。请使用concat+ifnull函数

select concat_ws('\n', id, coalesce(name,''), coalesce(age,''), coalesce(gender,''))
from your_table
select concat('\n', ifnull(id,''),ifnull(name,''),ifnull(age,''),ifnull(gender,'')) 
from your_table

您可能应该使用ifnull(column_name“”)将null列替换为空字符,然后尝试concat_ws

select concat_ws('\n',id,name,ifnull(age,''),gender) from table1; 
SQL Fiddle链接:

如果
age
null
,则返回
null
是否有效。但实际上我们有大量的列,所以如果我们为每个列添加“coalesce”,那么这个sql语句似乎很复杂而且不清楚。你有更好的主意吗?使用'concat_ws'返回'1\nabc\nM',但我希望它返回'1\nabc\n\nM'(在'abc'之后有2'\n')。然后不需要使用concat_ws使用concat和isnull函数。因为我们不知道哪一列具有null值,所以我们必须在解决方案中的每一列中使用'ifnull',例如'select concat_ws('\n',id,ifnull(name,')),ifnull(年龄“”),ifnull(性别“”)来自表1。实际上,我们的表有大量列,因此每个列都有大量的“ifnull”。这看起来很复杂,也不清楚。您有什么更好的想法吗?函数通常不接受动态列。在这种情况下,ifnull只能逐个应用于列。
select concat_ws('\n',id,name,ifnull(age,''),gender) from table1;