MySQL SELECT AS 将两列合并为一列

84

使用这个解决方案,我尝试在MySQL查询中使用COALESCE,并使用SELECT As来命名导出数据时的列名,最终输出到CSV文件中。

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

我想要三列:First_Name,Last_Name和Contact_Phone。

但我得到了五列:First_Name,Last_Name,ContactPhoneAreaCode1,ContactPhoneNumber1和Contact_Phone。

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


2
只需从查询中省略您不想看到的列即可。 - Ryan
4
COALESCE 函数返回第一个非空字段。因此,如果 ContactPhoneAreaCode1 不为空,则 Contact_Phone 将等于 ContactPhoneAreaCode1。你需要使用 CONCAT 函数。 - chrislondon
4个回答

168

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

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

这样您就不必单独检查每个列是否为NULL了。

或者,如果两个列实际上被定义为NOT NULL,那么CONCAT()将足够:

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

关于COALESCE,它与众不同:给定参数列表,它返回第一个不为NULL的参数。


你如何在CONCAT_WS中插入空格?添加“' '”无效。 - Pathros
在终端中工作正常,请检查查询是如何传递给MySQL服务器以及结果是如何处理的。 - raina77ow
1
啊,没错。谢谢你。我一开始没有在空格 ' ' 前面设置,而是在列之间设置的 :-P - Pathros

10

您无需列出ContactPhoneAreaCode1和ContactPhoneNumber1。

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

8

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

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

2
我认为你想要使用 CONCAT。 - chrislondon

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接