MySQL CONCAT函数:如何在MySQL中连接字符串

MySQL CONCAT函数广泛用于将多个列值连接到单个列中。在本文中,我们将研究MySQL CONCAT()语法,向您演示如何使用它,并探索CONCAT和CONCAT_WS之间的差异。

什么是串联?

连接不仅仅涉及计算机编程,它代表将字符串端到端连接的过程。在MySQL中,CONCAT函数从不同的单元格中获取字符串,并将它们连接到一个单元格中,从而创建一个新字符串。

为什么需要掌握?假设您需要从一个大表的多个列中执行数据选择。您的目标是检索数据并以适合阅读的格式呈现。CONCAT将让您通过一条简单的SQL语句完成这项工作。此外,它还节省了空间,因为多个字符串成为一个要处理的项目。

本文将探讨MySQL中CONCAT函数的语法和用法,以帮助您更好地理解和掌握它。

MySQL CONCAT()函数

CONCAT函数不是MySQL数据库所独有的。它是Oracle、SQL Server和PostgreSQL中也存在的常规SQL函数。然而,在MySQL中,语法更简单、更准确。

CONCAT函数的语法如下:

CONCAT(expression_1,expression_2,...expression_n); 

其中表达式_1、表达式_ 2和表达式 n表示要组合的字符串。

您可以根据需要添加任意多的表达式。但是,如果不提供至少一个表达式,就不能在MySQL中执行CONCAT。在这种情况下,查询将抛出一个错误。

使用SELECT的MySQL CONCAT

通常,我们在SELECT语句中使用CONCAT()。最简单的例子是将不同的文本片段连接在一起,以组合一个新词或短语。请注意,在下面的示例中,我们还为将显示结果的新列提供了名称:

SELECT CONCAT('My','SQL') AS 'Result';  

上面的语法不带空格地连接字符串,只得到一个单词。如果您想要“短语”,则需要在短语中添加空格分隔单独的单词:

SELECT CONCAT('MySQL ','is ','RDBMS') AS Result; 

重要的返回的串联字符串可能具有不同的MySQL数据类型——这取决于函数处理的参数:

  • 如果您有一个数字参数,CONCAT会将其转换为等效的非二进制字符串形式。

  • 如果至少有一个二进制字符串作为参数,CONCAT将返回一个二进制串。

  • 如果语法中的所有参数都是非二进制字符串,CONCAT将返回一个非二进制字符串。

  • 如果参数中有NULL,CONCAT将返回NULL。

具有空值的CONCAT()

让我们看看其中一个参数为NULL的示例。因此,函数返回NULL:

SELECT CONCAT('First Name, ','Last Name, ',NULL,'Address') AS Result;  

现在,让我们回顾一下在实践中使用CONCAT的不同情况。

MySQL CONCAT示例

我们回顾了将多个文本片段串联成一个字符串的过程。这是一个很好的例子来说明函数的工作方式。然而,工作例程通常涉及处理更大的字符串。

如何在MySQL中连接多列

假设,我们希望从客户表中检索特定数据——客户的姓名和地址,包括他们居住的城市和国家。customers表将所有这些信息以及其他一些数据存储在单独的列中。我们希望这些数据分为两列。一列应包含客户的姓名,第二列应显示客户的完整地址。

为了完成该任务,我们执行以下查询:

SELECT
   c.lastname AS Customer,
   CONCAT(c.address, ' ', c.city, ' ', c.country) AS Address
 FROM customers c;

结果表包含两列–客户和地址,其中地址列组合了地址、城市和国家/地区列的数据。

我们用逗号分隔要在地址列中组合的字符串。但是,它是可选的。为了使数据输出整洁且便于阅读,我们建议使用分隔符,如空格或逗号。

上面的语法示例涉及从所需列中选择和组合所有记录(我们的customers表有100行)。如果您的MySQL表要大得多,并且您不想检索所有数据,您可以始终限制结果的数量。CONCAT LIMIT解决了以下问题:

SELECT
   lastname AS Customer,
   CONCAT(Address, ', ', postalcode, ', ', city) AS Address
 FROM customers
 LIMIT 5;

这样,MySQL CONCAT字符串将只返回5行:

如果您只需要检索满足某些条件的数据,该怎么办?让我们看看如何过滤结果。

如何在何处使用CONCAT

让我们回到之前的案例。我们检索了客户的数据,并使用CONCAT将地址、城市和国家列中的值转换为包含所有这些值的更长地址字符串。现在,我们需要一个更窄的选择。我们希望结果集只显示来自新加坡的用户。

为此,我们执行以下查询:

SELECT
   lastname AS Customer,
   CONCAT(Address, ', ', postalcode, ', ', city) AS Address
 FROM customers
 WHERE country='Singapore';

结果如下:

MySQL CONCAT vs CONCAT_WS:有什么区别?

在前面的示例中,我们用逗号和空格分隔了结果串联字符串中的各个部分。但是,您也可以使用其他分隔符。为此,可以添加分隔符作为参数。但这种做法相当不方便和令人厌烦。幸运的是,还有另一种选择。

CONCAT_WS()包含CONCAT()函数的一个变体,代表连接分隔符。您可以只指定一次分隔符,而不是在每个参数之后将分隔符包含到语法中。

MySQL中CONCAT_WS()的语法如下:

CONCAT_WS(separator, expression1, expression2, expression3,...) 

分隔符始终在第一个参数中指定,它可以是字符串,与其他参数一样。函数将对整个字符串应用指定的分隔符。

SELECT
   CONCAT_WS(' ', firstname, lastname) AS Customer_name,
   CONCAT_WS(', ', Address, city, country) AS Address
 FROM customers;

MySQL CONCAT_WS的一个显著特征是它如何处理空值。如您所知,如果任何参数为NULL,CONCAT将返回NULL。

CONCAT_WS函数的工作方式不同。如果分隔符为NULL,则返回NULL。但是,如果任何连接参数为空,则此函数将忽略该参数,而其余参数将被处理和连接。

SELECT
   CONCAT_WS(NULL, address, postalcode, city) AS Address
 FROM customers;

查询仅返回空值。

现在,让我们添加NULL作为参数之一,添加逗号作为分隔符并检查结果。

SELECT lastname AS Customer_name,
   CONCAT_WS(', ', Address, NULL, city, country) AS Address
 FROM customers;

尽管参数中存在NULL,函数仍返回了有效的结果集。这就是为什么如果您想显示带有分隔符的字符串并且不想担心意外的空值,那么使用CONCAT_WS是更好的选择。

注意

如果要连接不同行中的值(例如,获取客户来自的所有国家的所有城市列表),则应使用GROUP_CONCAT()。它在MySQL中是一个单独的聚合函数,而不是具有GROUP BY的CONCAT(事实上,GROUP-BY与CONCAT不工作)。

SELECT 
     GROUP_CONCAT(country)
 FROM
     customers;

结论

MySQL CONCAT()函数及其“近亲”CONCAT_WS()在我们需要编译几个其他字符串的新字符串并使其易于阅读时非常有用。函数的语法和用法很简单,掌握它们不需要太多时间和精力。

今天,面向MySQL专家的现代工具和IDE允许以可视化模式简单高效地开发SQL。我们邀请您试驾市场上最好的MySQL IDE之一,它是MySQL工作台的一个不错的替代品⁠—用于MySQL的dbForge Studio。

从我们的网站下载Studio,并在30天免费试用期间评估其提供的所有尖端功能。

原文标题:MySQL CONCAT Function: How to Concatenate Strings in MySQL
原文作者:DbForge Team
原文链接:https://blog.devart.com/mysql-concat-function.html


免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论