Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL选择为将两列合并为一列_Mysql_Sql - Fatal编程技术网

MySQL选择为将两列合并为一列

MySQL选择为将两列合并为一列,mysql,sql,Mysql,Sql,使用,我尝试使用COALESCE作为MySQL查询的一部分,该查询在导出数据时使用SELECT as来命名列名,并输出到csv文件 SELECT FirstName AS First_Name , LastName AS Last_Name , ContactPhoneAreaCode1 , ContactPhoneNumber1 , COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Conta

使用,我尝试使用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、ContactPhoneNumber 1和ContactPhone


如何从查询中将ContactPhoneAreaCode1、ContactPhoneNumber1合并到Contact\u Phone的单个列中?

您无需单独选择这些列,即可在CONCAT中使用它们。只需删除它们,您的查询就会变成:

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

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

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

或者,如果两个列实际上都定义为
非空
,则就足够了:

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

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

您不需要列出ContactPhoneAreaCode1和ContactPhoneNumber1

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

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

我认为您需要concat只需将不希望看到的列保留在查询之外。
COALESCE
返回第一个非空字段。因此,如果ContactPhoneAreaCode1不为空,则ContactPhone将等于ContactPhoneAreaCode1。您想使用函数
CONCAT
如何在CONCAT\u WS中插入空格?通过添加
不起作用。在终端中工作正常,请检查查询如何传递到MySQL服务器以及结果如何处理。啊,是的。谢谢我没有在开始时设置空格
'
,而是在列之间:-P
SELECT FirstName , LastName , 
IF(FirstName IS NULL AND LastName IS NULL, NULL,' _ ',CONCAT(COALESCE(FirstName ,''), COALESCE(LastName ,''))) 
AS Contact_Phone FROM   TABLE1