69.日常问题整理[2023/04/06]sql将多列数据合成一列数据

目录

CONCAT 和 CONCAT_WS 和 GROUP_CONCAT

MySQL CONCAT函数

MySQL CONCAT_WS函数:使用分隔符连接字符串

GROUP_CONCAT函数


CONCAT 和 CONCAT_WSGROUP_CONCAT

可以使用MySQL 的 CONCATCONCAT_WS函数将两个或多个字符串连接在一起。

要连接两个或多个引用的字符串值,请将字符串放在一起,如下所示:

SELECT 'MySQL ' 'String ' 'Concatenation';

SQL

执行上面查询语句,得到以下结果 -

mysql> SELECT 'MySQL ' 'String ' 'Concatenation';
+----------------------------+
| MySQL                      |
+----------------------------+
| MySQL String Concatenation |
+----------------------------+
1 row in set

SQL

与其他数据库管理系统相比,MySQL字符串连接更为清晰。 例如,如果您使用PostgreSQLOracle,则必须使用字符串连接运算符||。 在Microsoft SQL Server中,您可以使用加法算术运算符(+)连接字符串值。

除了使用空格进行字符串连接之外,MySQL还提供了两个连接字符串值的函数:CONCATCONCAT_WS


MySQL CONCAT函数

MySQL CONCAT()函数需要一个或多个字符串参数,并将它们连接成一个字符串。CONCAT()函数需要至少一个参数,否则会引起错误。

下面说明了CONCAT()函数的语法。

CONCAT(string1,string2, ... );

SQL

CONCAT()函数在连接之前将所有参数转换为字符串类型。如果任何参数为NULL,则CONCAT()函数返回NULL值。

以下语句连接两个引用的字符串:MySQLCONCAT

SELECT CONCAT('MySQL','CONCAT');

SQL

执行上面查询语句,得到以下结果 -

mysql> SELECT CONCAT('MySQL','CONCAT');
+--------------------------+
| CONCAT('MySQL','CONCAT') |
+--------------------------+
| MySQLCONCAT              |
+--------------------------+
1 row in set

SQL

如果添加NULL值,则CONCAT函数将返回一个NULL值,如下所示:

mysql> SELECT CONCAT('MySQL',NULL,'CONCAT');
+-------------------------------+
| CONCAT('MySQL',NULL,'CONCAT') |
+-------------------------------+
| NULL                          |
+-------------------------------+
1 row in set

SQL

请参见customers表,其结构如下所示 -

mysql> desc customers;
+------------------------+---------------+------+-----+---------+-------+
| Field                  | Type          | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+---------+-------+
| customerNumber         | int(11)       | NO   | PRI | NULL    |       |
| customerName           | varchar(50)   | NO   |     | NULL    |       |
| contactLastName        | varchar(50)   | NO   |     | NULL    |       |
| contactFirstName       | varchar(50)   | NO   |     | NULL    |       |
| phone                  | varchar(50)   | NO   |     | NULL    |       |
| addressLine1           | varchar(50)   | NO   |     | NULL    |       |
| addressLine2           | varchar(50)   | YES  |     | NULL    |       |
| city                   | varchar(50)   | NO   |     | NULL    |       |
| state                  | varchar(50)   | YES  |     | NULL    |       |
| postalCode             | varchar(15)   | YES  |     | NULL    |       |
| country                | varchar(50)   | NO   |     | NULL    |       |
| salesRepEmployeeNumber | int(11)       | YES  | MUL | NULL    |       |
| creditLimit            | decimal(10,2) | YES  |     | NULL    |       |
+------------------------+---------------+------+-----+---------+-------+
13 rows in set

SQL

要获取联系人的全名,您可以使用CONCAT函数将名字,空格,姓氏连接,如下查询语句:

SELECT 
    concat(contactFirstName,' ',contactLastName) Fullname
FROM
    customers;

SQL

执行上面查询语句,得到以下结果 -

mysql> SELECT 
    concat(contactFirstName,' ',contactLastName) Fullname
FROM
    customers;
+--------------------------+
| Fullname                 |
+--------------------------+
| Carine  Schmitt          |
| Jean King                |
| Peter Ferguson           |
| Janine  Labrune          |
| Jonas  Bergulfsen        |
***** 此处省略了一大波数据 ****
| Sue Taylor               |
| Thomas  Minsu            |
| Valarie Franco           |
| Tony Snowden             |
+--------------------------+
122 rows in set

MySQL CONCAT_WS函数:使用分隔符连接字符串

MySQL提供了一种特殊形式的CONCAT()函数:CONCAT_WS()函数。CONCAT_WS()函数将两个或多个字符串值与预定义的分隔符相连接。

下面说明了CONCAT_WS()函数的语法:

CONCAT_WS(seperator,string1,string2, ... );

SQL

第一个参数是其他参数:string1string2...的分隔符。

CONCAT_WS函数在字符串参数之间添加分隔符,并返回单个字符串,并在字符串参数之间插入分隔符。

以下语句连接两个字符串值:MaxSu,并用逗号分隔这两个字符串:

SELECT CONCAT_WS(',','Max','Su');

SQL

执行上面查询语句,得到以下结果 -

mysql> SELECT CONCAT_WS(',','Max','Su');
+---------------------------+
| CONCAT_WS(',','Max','Su') |
+---------------------------+
| Max,Su                    |
+---------------------------+
1 row in set

Shell

当且仅当作为分隔符的第一个参数为NULL时,CONCAT_WS函数才返回NULL。请参阅以下示例:

mysql> SELECT CONCAT_WS(NULL ,'Jonathan', 'Minsu');
+--------------------------------------+
| CONCAT_WS(NULL ,'Jonathan', 'Minsu') |
+--------------------------------------+
| NULL                                 |
+--------------------------------------+
1 row in set

SQL

CONCAT函数不同,CONCAT_WS函数在分隔符参数之后跳过NULL值。 换句话说,它忽略NULL值。

mysql> SELECT CONCAT_WS(',','Jonathan', 'Minsu',NULL);
+-----------------------------------------+
| CONCAT_WS(',','Jonathan', 'Minsu',NULL) |
+-----------------------------------------+
| Jonathan,Minsu                          |
+-----------------------------------------+
1 row in set

GROUP_CONCAT函数

group_concat()函数是将所有的查询结果拼接成一个字符串返回,不过在不同的字段值之间默认是用逗号隔开的

可以看到返回的值就只有一个值。

像concat()函数那样直接拼接内容,中间没有做隔离,很可能会导致我们无法判断哪些字符是属于哪一个字段的。而group_concat()函数默认是用逗号隔开两行不同查询结果的。当然也支持自己定义隔离的符号,比如

这里就是在两个字段中间也定义了隔离符号,两次不同查询结果之间还有默认的逗号隔离。这样的返回内容才能帮助我们更好的判断信息。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值