我的数据是这样的: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