mysql函数 字段拼接concat()、concat_ws()
2020-11-27 本文已影响0人
爱折腾的傻小子
concat()函数
- 将多个字符串连接成一个字符串
-
concat(str1, str2,...)
- 返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null
- 示例
-- 拼接字段 area、fr、best_history_data
select concat(area,fr,best_history_data) from test_concat order by id limit 5;
-- 想在字段间添加分隔符,需要在每两个字段间都添加一个分隔符
select concat(area,',',fr,',',best_history_data) as test_result from test_concat order by id limit 5;
concat_ws()函数
- 和concat()一样,将多个字符串连接成一个字符串
- 但是可以一次性指定分隔符
-
concat_ws(separator, str1, str2, ...)
- 第一个参数指定分隔符,分隔符不能为null,如果为null,则返回结果为null
- 示例
-- 已英文逗号分隔字段area、fr、best_history_data
select concat_ws(',',area,fr,best_history_data) from test_concat order by id limit 5;
-- 和MySQL中concat函数不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL
select concat_ws(',','11','22',NULL);
/*
+-------------------------------+
| concat_ws(',','11','22',NULL) |
+-------------------------------+
| 11,22 |
+-------------------------------+
1 row in set (0.00 sec)
*/
group_concat()函数
- 将group by产生的同一个分组中的值连接起来,返回一个字符串结果
-
group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
- 通过使用distinct可以排除重复值
- 如果希望对结果中的值进行排序,可以使用order by子句
- separator是一个字符串值,缺省为一个逗号
- 示例
/*
+-------------------------------+
| id | age | name |
+-------------------------------+
| 1 | 30 | 啊啊啊 |
| 2 | 50 | 是是是 |
| 3 | 55 | 张学友 |
| 4 | 55 | 郭富城 |
+-------------------------------+
1 row in set (0.00 sec)
*/
-- 根据area分组,拼接每个区域各个指标的指标值
select GROUP_CONCAT(id,name) from t_user GROUP BY age;
/*
+-------------------------------+
| GROUP_CONCAT(id,name) |
+-------------------------------+
| 1啊啊啊 |
| 2是是是 |
| 3张学友,4郭富城 |
+-------------------------------+
1 row in set (0.00 sec)
*/
select GROUP_CONCAT(id,name separator '-') from t_user GROUP BY age;
/*
+-------------------------------+
| GROUP_CONCAT(id,name) |
+-------------------------------+
| 1啊啊啊 |
| 2是是是 |
| 3张学友-4郭富城 |
+-------------------------------+
1 row in set (0.00 sec)
*/
select GROUP_CONCAT(concat_ws('-|-',id,name) separator '&') from t_user GROUP BY age;
/*
+-------------------------------+
| GROUP_CONCAT(concat_ws('-|-',id,name) separator '&') |
+-------------------------------+
| 1-|-啊啊啊 |
| 2-|-是是是 |
| 3-|-张学友&4-|-郭富城 |
+-------------------------------+
1 row in set (0.00 sec)
*/
select GROUP_CONCAT(concat_ws('-|-',id,`name`) order by `id` asc separator '&') from t_user GROUP BY age;
/*
+-------------------------------+
| GROUP_CONCAT(concat_ws('-|-',id,`name`) order by `id` asc separator '&') |
+-------------------------------+
| 1-|-啊啊啊 |
| 2-|-是是是 |
| 3-|-张学友&4-|-郭富城 |
+-------------------------------+
1 row in set (0.00 sec)
*/
select GROUP_CONCAT(concat_ws('-|-',id,`name`) order by `id` desc separator '&') from t_user GROUP BY age;
/*
+-------------------------------+
| GROUP_CONCAT(concat_ws('-|-',id,`name`) order by `id` asc separator '&') |
+-------------------------------+
| 1-|-啊啊啊 |
| 2-|-是是是 |
| 4-|-郭富城&3-|-张学友 |
+-------------------------------+
1 row in set (0.00 sec)
*/
参考来源:yuandian43