-2

我正在使用的 DBMS 是 MySQL。

这是表格:

                    AUTHOR
author_id | first_name | last_name | patronymic
-----------------------------------------------
     1    | John       | Bush      | NULL
     2    | Sergey     | Burov     | Romanovich
     3    | NULL       | Filin     | NULL

如果我发出此查询:

SELECT author_id,
       CONCAT(first_name, ' ', last_name,  ' ', patronymic) AS full_name
FROM   author;

输出如下所示:

author_id | full_name
-----------------------------------
     1    | NULL
     2    | Sergey Burov Romanovich
     3    | NULL

因此,正如您从示例中看到的那样,如果一个字段具有 NULL 值,那么在连接过程中,整个事物都会被设置为 NULL。请解释一下,如何使 MySQL 将 NULL 值转换为长度为 0 的字符串,或者简单地使其不连接 NULL 值?

谢谢大家。

4

4 回答 4

5

您可以使用CONCAT_WS使用分隔符连接字符串,并跳过空值:

SELECT author_id,
       CONCAT_WS(' ', first_name, last_name,  patronymic) AS full_name
FROM   author;

在此处查看小提琴。

于 2013-04-08T14:18:31.377 回答
0

这是直接回答您的问题的方法:

SELECT author_id,
       CONCAT(ISNULL(first_name,''), ' ', 
              ISNULL(last_name,''),  ' ',
              ISNULL(patronymic,'')) AS full_name
FROM author;

甚至这个(解决空中间名的双空格问题):

SELECT author_id,
       CONCAT(ISNULL(CONCAT(first_name,' '),''), 
              ISNULL(CONCAT(last_name,' '),''),
              ISNULL(patronymic,'')) AS full_name
FROM author;

但这将回答真正的问题——在这种或更复杂的情况下进行良好格式化的最佳解决方案:

SQL 中的 FirstName、LastName 太复杂?

于 2013-04-08T14:17:43.487 回答
0

在所有列上使用 aCOALESCE以保证它们永远不会返回 null(通过返回值或空字符串)

于 2013-04-08T14:17:48.660 回答
0
SELECT author_id,
   CONCAT(ifnull(first_name,''), ' ', ifnull(last_name,''),  ' ', ifnull(patronymic,'')) AS full_name FROM   author;
于 2013-04-08T14:21:22.427 回答