百川的博客

百川的博客
写点或者转载一些感觉精彩的文章,一起分享。见证下成长之路

sql查询结果列拼接 sql查询结果列拼接成逗号分隔的字符串

CONCAT函数

功能:连接一个或多个字符串,然后返回连接后的字符串。
函数形式:CONCAT(str1,str2,…)

示例1:单个字符串连接

    
    mysql> select concat('Hello');
    +-----------------+
    | concat('Hello') |
    +-----------------+
    | Hello           |
    +-----------------+

示例2:连接多个字符串

mysql> select concat('Hello',' ','world');
+-----------------------------+
| concat('Hello',' ','world') |
+-----------------------------+
| Hello world                 |
+-----------------------------+

示例3:任意连接的字符串为NULL,则连接后返回的结果也为NULL

mysql> select concat('Hello',' ','world',null);
+----------------------------------+
| concat('Hello',' ','world',null) |
+----------------------------------+
| NULL                             |
+----------------------------------+

示例4: 左查询拼接. 姓和名在不同的表, 查询出来后拼接成全名

SELECT zhang.id,CONCAT(zhang.`name`,san.`name`) AS `fullName` FROM zhang LEFT JOIN san ON (zhang.id=san.parentid) WHERE zhang.id = 2;

2021-03-26T09:48:01.png

CONCAT_WS函数

功能:通过指定的“连接符”连接一个或多个字符串,然后返回连接后的字符串。
函数形式:CONCAT_WS(separator,str1,str2,…)

示例1:通过下划线连接多个字符串

mysql> select concat_ws('_','功能编号','需求编号','用例编号');
+-------------------------------------------------------------+
| concat_ws('_','功能编号','需求编号','用例编号')             |
+-------------------------------------------------------------+
| 功能编号_需求编号_用例编号                                  |
+-------------------------------------------------------------+

示例2:当连接的字符串中存在NULL时,则连接后返回的结果不为NULL

mysql> select concat_ws('_','功能编号','需求编号','用例编号',null);
+------------------------------------------------------------------+
| concat_ws('_','功能编号','需求编号','用例编号',null)             |
+------------------------------------------------------------------+
| 功能编号_需求编号_用例编号                                       |
+------------------------------------------------------------------+

示例3:当分隔符为null时,则返回的结果也为NULL

mysql> select concat_ws(null,'功能编号','需求编号','用例编号');
+--------------------------------------------------------------+
| concat_ws(null,'功能编号','需求编号','用例编号')             |
+--------------------------------------------------------------+
| NULL                                                         |
+--------------------------------------------------------------+

GROUP_CONCAT函数

功能:将属于同一分组的值进行连接,然后按分组返回结果字符串。
函数形式:GROUP_CONCAT(expr)

示例数据,假设Course表存在以下数据

mysql> select * from Course;
+-------+--------------+
| stuId | courseName   |
+-------+--------------+
|  1001 | 大学语文     |
|  1001 | 原理力学     |
|  1001 | 固体物理     |
|  1002 | 大学英语     |
|  1002 | 专八英语     |
+-------+--------------+

示例1:获取每个学生的所有课程,并在一行显示

mysql> SELECT stuId, GROUP_CONCAT(courseName) AS courses FROM Course GROUP BY stuId;
+-------+----------------------------------------+
| stuId | courses                                |
+-------+----------------------------------------+
|  1001 | 大学语文,原理力学,固体物理             |
|  1002 | 大学英语,专八英语                      |
+-------+----------------------------------------+

示例2:GROUP_CONCAT的默认分隔符为“,”,也可通过SEPARATOR定义分隔符

mysql> SELECT stuId, GROUP_CONCAT(courseName SEPARATOR '&&') AS courses FROM Course GROUP BY stuId;
+-------+------------------------------------------+
| stuId | courses                                  |
+-------+------------------------------------------+
|  1001 | 大学语文&&原理力学&&固体物理             |
|  1002 | 大学英语&&专八英语                       |
+-------+------------------------------------------+

示例3:对同一分组内的值进行排序后在连接

mysql> SELECT stuId, GROUP_CONCAT(courseName ORDER BY courseName desc) AS courses FROM Course GROUP BY stuId;
+-------+----------------------------------------+
| stuId | courses                                |
+-------+----------------------------------------+
|  1001 | 大学语文,固体物理,原理力学             |
|  1002 | 大学英语,专八英语                      |
+-------+----------------------------------------+



参考资料:
https://blog.csdn.net/lchq1995/article/details/86615119
https://blog.csdn.net/jiang1986829/article/details/47301717

本原创文章未经允许不得转载 | 当前页面:百川的博客 » sql查询结果列拼接 sql查询结果列拼接成逗号分隔的字符串

评论