mysql - 当数据不为空时如何合并不同列的数据?

标签 mysql sql concatenation

我有一个包含不同列的表格,如下所示

CREATE TABLE survey(
id int(11) not null auto_increment,
what_is_your_name VARCHAR(255),
how_old_are_you varchar(20),
your_occupation varchar(255)
...
...
...
)

我需要根据调查表的结果构建输出,但仅当列不为空时才需要连接值。

所以如果提供了所有值,我希望最终的字符串看起来像这样 姓名是:[你的名字是什么] 年龄:[你多大了] 职业:[您的职业]

如果只提供了 2 个值,但 [what_is_your_name] 为 null,则输出应如下所示 姓名是:[你的名字是什么] 职业:[您的职业]

但是,我只想连接该值,因为该值不为空。 请注意,上表还有很多问题,但我只发布了一些表来解释问题。

如何在 MySQL 中做到这一点?

谢谢

最佳答案

你可以做这样的事情

SELECT CONCAT_WS(' ', 
         COALESCE(CONCAT('NAME: ', what_is_your_name), ''),
         COALESCE(CONCAT('AGE: ', how_old_are_you), ''),
         COALESCE(CONCAT('OCCUPATION: ', your_occupation), '')) survey_details
  FROM survey

示例输出:

+---------------------------------------------------+
| survey_details                                    |
+---------------------------------------------------+
| NAME: john AGE: 35 OCCUPATION: Software Developer |
| NAME: mark  OCCUPATION: Unemployed                |
| NAME: helen AGE: 35                               |
+---------------------------------------------------+

这里是SQLFiddle 演示

关于mysql - 当数据不为空时如何合并不同列的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19173827/

相关文章:

MySQL 从表名匹配字符串中选择

c# - last_insert_id 多线程

php - 数组到逗号分隔的字符串

c# - Dapper async/await 连接超时

jquery - 使用 jQuery 连接效果

mysql - 未使用 SELECT 查询显示所有选定字段 - MySQL

mysql - 从多表 SELECT 语句返回无效结果

sql - 如何查找 Oracle 表中的月份间隔?

java - "a string with a char: "+ 'c' 比 "a string with a char: "+ "c"更好还是更差?

javascript - 我怎样才能得到正确的输出?