【问题标题】:MySQL SELECT AS combine two columns into oneMySQL SELECT AS 将两列合二为一
【发布时间】:2013-09-17 21:30:27
【问题描述】:

使用this solution,我尝试使用 COALESCE 作为 MySQL 查询的一部分,该查询使用 SELECT As 输出到 csv 文件,以便在导出数据时命名列名。

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , ContactPhoneAreaCode1
     , ContactPhoneNumber1
     , COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

我想要 3 列:First_Name、Last_Name 和 Contact_Phone

我得到 5 列:First_Name、Last_Name、ContactPhoneAreaCode1、ContactPhoneNumber1 和 Contact_Phone

如何在查询中隐藏将 ContactPhoneAreaCode1、ContactPhoneNumber1 合并到 Contact_Phone 的单个列中?

【问题讨论】:

  • 只保留您不想在查询中看到的列。
  • COALESCE 返回第一个非空字段。因此,如果 ContactPhoneAreaCode1 不为空,则 Contact_Phone 将等于 ContactPhoneAreaCode1。你想使用函数CONCAT

标签: mysql sql


【解决方案1】:

如果两列都可以包含NULL,但您仍想将它们合并为单个字符串,最简单的解决方案是使用CONCAT_WS()

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT_WS('', ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

这样您就不必分别检查每一列的NULL-ness。

或者,如果两个列都定义为NOT NULLCONCAT() 就足够了:

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

至于COALESCE,它有点不同:给定参数列表,它返回第一个不是NULL

【讨论】:

  • 如何在 CONCAT_WS 中插入空格?通过添加' ' 不起作用。
  • 在终端中工作正常,检查查询是如何传递给 MySQL 服务器的以及结果是如何处理的。
  • 啊,是的。谢谢。我没有在开头设置空间' ',而是在列之间:-P
【解决方案2】:

您无需列出 ContactPhoneAreaCode1 和 ContactPhoneNumber1

SELECT FirstName AS First_Name, 
LastName AS Last_Name, 
COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
FROM TABLE1

【讨论】:

    【解决方案3】:

    您无需单独选择列即可在 CONCAT 中使用它们。只需删除它们,您的查询将变为:

    SELECT FirstName AS First_Name
         , LastName AS Last_Name
         , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
      FROM TABLE1
    

    【讨论】:

    • 我想你想要CONCAT
    【解决方案4】:

    如果是NULL 列,最好使用这样的IF 子句,它结合了CONCATCOALESCE 的两个功能,并在结果中的列之间使用特殊字符,如空格或'_'

    SELECT FirstName , LastName , 
    IF(FirstName IS NULL AND LastName IS NULL, NULL,' _ ',CONCAT(COALESCE(FirstName ,''), COALESCE(LastName ,''))) 
    AS Contact_Phone FROM   TABLE1
    

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      相关资源
      最近更新 更多