80

使用此解决方案,我尝试使用 COALESCE 作为 MySQL 查询的一部分,该查询输出到 csv 文件,使用 SELECT As 在导出数据时命名列名。

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 的单个列中?

4

4 回答 4

166

如果两列都可以包含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.

于 2013-09-17T21:35:08.293 回答
10

您不需要列出 ContactPhoneAreaCode1 和 ContactPhoneNumber1

SELECT FirstName AS First_Name, 
LastName AS Last_Name, 
COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
FROM TABLE1
于 2013-09-17T21:36:55.140 回答
7

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

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1
于 2013-09-17T21:34:51.730 回答
2

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-01-20T14:15:07.843 回答