MySQL将两列合并为一列

142

我正在尝试将两列合并为一列,但合并后的列中只得到了值“0”,而不是单词的组合。

以下是我尝试过的方法和其他人尝试过的方法:

SELECT column1 + column2 AS column3
FROM table;

SELECT column1 || column2 AS column3
FROM table;

SELECT column1 + ' ' + column2 AS column3
FROM table;

能否有人告诉我我做错了什么?


1
你使用的是哪个数据库?这两列的类型是什么? - Gordon Linoff
可能是将两个数据库列连接成一个结果集列的重复问题。 - Choudhury Saadmaan Mahmid
请查看以下内容:https://dev59.com/yWw15IYBdhLWcg3wv-NM - Choudhury Saadmaan Mahmid
使用最佳答案的解决方案,但添加一个管道符号。选择concat(column1,'|',column2)。这有助于后来在Excel中使用。 - Cosmic Hawk
12个回答

224

我猜你正在使用MySQL,其中+运算符执行加法,并将值静默转换为数字。如果一个值不以数字开头,则转换后的值为0

所以尝试这个:

select concat(column1, column2)

添加空格的两种方式:

select concat(column1, ' ', column2)
select concat_ws(' ', column1, column2)

我正在使用 SQL Server 2005,但是它给我返回了错误信息:Incorrect syntax near ')' - Nad
6
这个问题的标签是“mysql”。如果你有关于SQL Server的问题,请把它作为一个问题来提出,而不是在评论中提问。我可以为你进行翻译,让内容更加通俗易懂,但不能改变原意,也不会提供解释或其他额外内容。 - Gordon Linoff
同样适用于T-SQL,是一个优秀且简单的解决方案。将两列合并为一列。 - Ryan Battistone

34

试试这个,对我有效

select (column1 || ' '|| column2) from table;

4
这看起来像是Oracle。 - coburne
这个方法也适用于合并多个(超过2个)列。谢谢。 - Kayathiri
1
SQL标准提供了CONCAT()函数,用于将两个字符串连接成一个字符串。然而,SQLite不支持CONCAT()函数。相反,它使用连接运算符(||)将两个字符串合并为一个。 - PaulH

18

对我很有效

SELECT CONCAT(column1, ' ' ,column2) AS newColumn;

7

当我需要合并的列之间有空格时,这是唯一有效的解决方法。

select concat(concat(column1,' '), column2)

6
如果你在使用 Oracle,那么:
SELECT column1 || column2 AS column3
FROM table;

或者

如果您正在使用MySQL:

SELECT Concat(column1 ,column2) AS column3
FROM table;

3

对于MySQL的粉丝们,我喜欢使用IFNULL()函数。其他答案中可能会建议使用ISNULL()函数来实现类似的功能。在我的情况下,我有一个一定不为空的描述列以及一个可能为NULL的序列号列。以下是我如何将它们合并为一个列:

SELECT CONCAT(description,IFNULL(' SN: ', serial_number),'')) FROM my_table;

我的研究结果表明,将字符串与 NULL 连接的结果是 NULL。在这种情况下,我一直在获取替代值。


1

我已经使用了这种方式,它是永远最好的。在这段代码中,null值也已经被处理。

SELECT Title,
FirstName,
lastName, 
ISNULL(Title,'') + ' ' + ISNULL(FirstName,'') + ' ' + ISNULL(LastName,'') as FullName 
FROM Customer

尝试一下这个...

1

表格:

---------------------
| column1 | column2 |
---------------------
|   abc   |   xyz   |
---------------------

Oracle 中:

SELECT column1 || column2 AS column3
FROM table_name;

输出:

表格:

---------------------
| column3           |
---------------------
| abcxyz            |
---------------------

如果您想在两列数据中放置“,”或“。”或任何字符串,则可以使用以下方法:
SELECT column1 || '.' || column2 AS column3
FROM table_name;

输出:

表格:

---------------------
| column3           |
---------------------
| abc.xyz           |
---------------------

0
SELECT Column1 + ' - ' + Column2 AS 'FullName' FROM TableName                              

0
SELECT   CONVERT (nvarchar (10), Month(NextDate))+'-'+CONVERT (nvarchar (10), Year(NextDate)) as MonthOfYear, COUNT(CaseNo) as CountDisposal
FROM dbo.Main_Cause_List 
WHERE (DisposalState = 'Dispossed-off') 
GROUP BY Month(NextDate),Year(NextDate);

1
欢迎来到Stack Overflow。没有任何解释的代码转储很少有帮助。Stack Overflow是关于学习的,而不是提供盲目复制和粘贴的片段。请[编辑]您的问题并解释它如何回答特定的问题。请参见[答案]。当回答旧问题(这个问题已经超过7年了)时,这尤其重要,因为已经有现有的答案。这个答案如何改进已经存在的内容? - Chris

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