sql 拼接查询的结果

2022-02-16 12:03:02
  • concat()

concat(str1,str2,…)

将多个字符串连接成一个字符串。任何一个参数为NULL ,则返回值为 NULL。

	mysql> select concat('aa','bb');
	+-------------------+
	| concat('aa','bb') |
	+-------------------+
	| aabb              |
	+-------------------+
	1 row in set (0.00 sec)
	
	mysql> select concat('aa',null);
	+-------------------+
	| concat('aa',null) |
	+-------------------+
	| NULL              |
	+-------------------+
	1 row in set (0.00 sec)
  • concat_ws()

concat_ws(separator,str1,str2,…)

第一个参数是分隔符。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。concat_ws()不会忽略空字符串, 会忽略 NULL。

	mysql> select concat_ws('#','a','b');
	+------------------------+
	| concat_ws('#','a','b') |
	+------------------------+
	| a#b                    |
	+------------------------+
	1 row in set (0.00 sec)
	
	mysql> select concat_ws('#','a',null,'','b');
	+--------------------------------+
	| concat_ws('#','a',null,'','b') |
	+--------------------------------+
	| a##b                           |
	+--------------------------------+
	1 row in set (0.00 sec)
  • group_concat()

group_concat( [distinct] field [order by field asc/desc ] [separator ‘分隔符’] )

distinct 排除重复值
order by 对结果中的值进行排序
separator 分隔符 默认为逗号(,)
使用中可以与group by或者in函数查询的值连接起来,返回一个字符串结果。
user 表如下

mysql> select * from user;
+----+------+----------+
| id | name | province |
+----+------+----------+
|  1 | A    | 北京     |
|  2 | B    | 北京     |
|  3 | C    | 上海     |
|  4 | D    | 浙江     |
|  5 | E    | 广东     |
|  6 | F    | 江苏     |
|  7 | H    | 广东     |
|  8 | A    | 上海     |
+----+------+----------+
8 rows in set (0.00 sec)

常规用法

mysql> SELECT GROUP_CONCAT(DISTINCT name SEPARATOR '-') FROM user;
+-------------------------------------------+
| GROUP_CONCAT(DISTINCT name SEPARATOR '-') |
+-------------------------------------------+
| A-B-C-D-E-F-H                             |
+-------------------------------------------+
1 row in set (0.00 sec)

与group by一起使用

mysql> SELECT province ,GROUP_CONCAT(name) FROM user group by province;
+----------+--------------------+
| province | GROUP_CONCAT(name) |
+----------+--------------------+
| 上海     | C,A                |
| 北京     | A,B                |
| 广东     | E,H                |
| 江苏     | F                  |
| 浙江     | D                  |
+----------+--------------------+
5 rows in set (0.00 sec)

与in一起使用

mysql> SELECT GROUP_CONCAT(name) FROM user where province in ('北京','上海');
+--------------------+
| GROUP_CONCAT(name) |
+--------------------+
| A,B,C,A            |
+--------------------+
1 row in set (0.00 sec)
  • 作者:不玩了把钱还我
  • 原文链接:https://blog.csdn.net/judicator0301/article/details/122361435
    更新时间:2022-02-16 12:03:02