问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

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

创作时间:
作者:
@小白创作中心

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

引用
CSDN
1.
https://blog.csdn.net/m0_65012566/article/details/136581628

MySQL CONCAT函数是数据库开发中常用的字符串拼接工具,它能够将多个列值连接到单个列中,从而简化数据处理和展示。本文将详细介绍CONCAT函数的语法、用法及其与CONCAT_WS的区别,并通过多个实际案例帮助读者掌握这一实用技能。

什么是字符串拼接?

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

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

MySQL CONCAT()函数

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

CONCAT函数的语法如下:

CONCAT(expression_1,expression_2,…expression_n);

其中,expression_1、expresson_2、xpression_n表示要组合的字符串。您可以根据需要添加任意多个表达式。但是,如果不提供至少一个表达式,就无法在MySQL中执行CONCAT。在这种情况下,查询将抛出一个错误。

带有SELECT的 CONCAT

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

select CONCAT("My","SQL")from  Result

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

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

重要!返回的串联字符串可能是不同的MySQL数据类型–它取决于函数处理的参数:

  • 如果您有一个数字参数,CONCAT会将其转换为等效的非二进制字符串形式。
  • 如果至少有一个二进制字符串作为参数,CONCAT将返回二进制字符串。
  • 如果语法中的所有参数都是非二进制字符串,CONCAT将返回非二进制字符串。
  • 如果参数中有NULL,CONCAT将返回NULL。

带有NULL值的CONCAT()

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

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

MySQL CONCAT示例

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

如何在MySQL中拼接多个列

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

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

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

生成的表包含两列–客户和地址,其中地址列组合了来自地址、城市和国家列的数据。

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

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

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

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

如何将CONCAT与WHERE结合使用

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

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

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

MySQL CONCAT与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。请记住,如果任何参数为NULL,CONCAT将返回NULL。

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

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

查询仅返回NULL值。

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

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

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

注释

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

SELECT 
     GROUP_CONCAT(country)
 FROM
     customers;

结论

MySQL CONCAT() 函数及其 “近亲” CONCAT_WS() 的主要功能是拼接其他几个不同字符串组成的新字符串,并使其易于阅读。函数的语法和用法都很简单,掌握它们不需要太多时间和精力。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号