【问题标题】:NULL values turn everything into NULL during concatenationNULL 值在连接期间将所有内容都变为 NULL
【发布时间】:2013-03-30 16:12:51
【问题描述】:

我正在使用的 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 值?

提前谢谢大家。

【问题讨论】:

标签: mysql sql concatenation


【解决方案1】:

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

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

请看小提琴here

【讨论】:

    【解决方案2】:

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

    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;
    

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

    FirstName, LastName in SQL, too complex?

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:
        SELECT author_id,
           CONCAT(ifnull(first_name,''), ' ', ifnull(last_name,''),  ' ', ifnull(patronymic,'')) AS full_name FROM   author;
        

        【讨论】:

          猜你喜欢
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-07-15
          • 2020-03-01
          相关资源
          最近更新 更多