MySQL SELECT AS将两列合并为一


76

使用此解决方案,我尝试将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列:名字,姓氏和联系人电话

我得到5列:名字,姓氏,ContactPhoneAreaCode1,ContactPhoneNumber1和Contact_Phone

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


2
只需在查询中保留不想看到的列即可。
瑞安(Ryan)

4
COALESCE返回第一个非空字段。因此,如果ContactPhoneAreaCode1不为null,则Contact_Phone将等于ContactPhoneAreaCode1。您想使用该功能CONCAT
chrislondon 2013年

Answers:


148

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

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

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

或者,如果两列都实际定义为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 Server以及如何处理结果。
raina77ow

1
嗯是的 谢谢。我不是' '在开头设置空格,而是在各列之间设置空格:-P
Pathros,

8

您不需要列出ContactPhoneAreaCode1和ContactPhoneNumber1

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

6

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

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

2
我认为您想要CONCAT
chrislondon 2013年

2

对于NULL列,最好使用这样的IF子句,它结合了:CONCAT和两个功能,并COALESCE在列之间使用特殊字符,如空格或'_'

SELECT FirstName , LastName , 
IF(FirstName IS NULL AND LastName IS NULL, NULL,' _ ',CONCAT(COALESCE(FirstName ,''), COALESCE(LastName ,''))) 
AS Contact_Phone FROM   TABLE1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.