MySQL中concat()、concat_ws()、group_concat()函数使用技巧与心得

参考链接:https://zhuanlan.zhihu.com/p/257399676

首先我们来建立一个测试的表和数据,代码如下

CREATE TABLE `per` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `pname` varchar(50) DEFAULT NULL,
  `page` int(11) DEFAULT NULL,
  `psex` varchar(50) DEFAULT NULL,
  `paddr` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4;```
​
​
INSERT INTO `per` VALUES ('1', '王小华', '30', '男', '北京');
INSERT INTO `per` VALUES ('2', '张文军', '24', '男', '上海');
INSERT INTO `per` VALUES ('3', '罗敏', '19', '女', '重庆');
INSERT INTO `per` VALUES ('4', '张建新', '32', '男', '重庆');
INSERT INTO `per` VALUES ('5', '刘婷', '26', '女', '成都');
INSERT INTO `per` VALUES ('6', '刘小亚', '22', '女', '重庆');
INSERT INTO `per` VALUES ('7', '王建军', '22', '男', '贵州');
INSERT INTO `per` VALUES ('8', '谢涛', '28', '男', '海南');
INSERT INTO `per` VALUES ('9', '张良', '26', '男', '上海');
INSERT INTO `per` VALUES ('10', '黎记', '17', '男', '贵阳');
INSERT INTO `per` VALUES ('11', '赵小丽', '26', '女', '上海');
INSERT INTO `per` VALUES ('12', '张三', null, '女', '北京');

一、concat()函数

首先我们先学一个函数叫concat()函数, 这个函数非常简单

功能:就是将多个字符串连接成一个字符串

语法:concat(字符串1, 字符串2,…) 字符串参数用逗号隔开!

返回值: 结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

案例1

select concat(‘重庆’,‘北京’,‘上海’);
效果如下图: 是不是觉得很简单 很直观呢!

案例2

这有一张表


 +----+-----------+------+------+--------+
 | id | pname     | page | psex | paddr  |
 +----+-----------+------+------+--------+
 |  1 | 王小华    |   30 || 北京   |
 |  2 | 张文军    |   24 || 上海   |
 |  3 | 罗敏      |   19 || 重庆   |
 |  4 | 张建新    |   32 || 重庆   |
 |  5 | 刘婷      |   26 || 成都   |
 |  6 | 刘小亚    |   22 || 重庆   |
 |  7 | 王建军    |   22 || 贵州   |
 |  8 | 谢涛      |   28 || 海南   |
 |  9 | 张良      |   26 || 上海   |
 | 10 | 黎记      |   17 || 贵阳   |
 | 11 | 赵小丽    |   26 || 上海   |
 | 12 | 张三      | NULL || 北京   |
 +----+-----------+------+------+--------+#-- 执行如下语句
 select concat(pname,page,psex) from per;#--结果
 +-------------------------+
 | concat(pname,page,psex) |
 +-------------------------+
 | 王小华30|
 | 张文军24|
 | 罗敏19|
 | 张建新32|
 | 刘婷26|
 | 刘小亚22|
 | 王建军22|
 | 谢涛28|
 | 张良26|
 | 黎记17|
 | 赵小丽26|
 | NULL                    |
 +-------------------------+#--为什么会有一条是NULL呢?  
 #--那是因为第12条数据中的page字段为空,根据有一个字段为空结果就为NULL的理论推导出 查询出的最后一条记录为NULL!


但是大家一定会发现虽然连在一起显示了 但是彼此没有分隔符啊 看起来好难受 对不对? 所以接下来我们就来讲讲衍生出来的 concat_ws()函数

二、concat_ws()函数

功能:concat_ws()函数 和 concat()函数一样,也是将多个字符串连接成一个字符串,但是可以指定分隔符!

语法:concat_ws(separator, str1, str2, ...) 第一个参数指定分隔符, 后面依旧是字符串

separator就是分隔符字符!

需要注意的是分隔符不能为null,如果为null,则返回结果为null。
案例代码:

 select concat_ws(',',pname,page,psex) from per;  
 #--以逗号分割 结果如下
 +--------------------------------+
 | concat_ws(',',pname,page,psex) |
 +--------------------------------+
 | 王小华,30,|
 | 张文军,24,|
 | 罗敏,19,|
 | 张建新,32,|
 | 刘婷,26,|
 | 刘小亚,22,|
 | 王建军,22,|
 | 谢涛,28,|
 | 张良,26,|
 | 黎记,17,|
 | 赵小丽,26,|
 | 张三,|
 +--------------------------------+#--把分隔符指定为null,结果全部变成了nullselect concat_ws(null,pname,page,psex) from per;   #--错误的
 +---------------------------------+
 | concat_ws(null,pname,page,psex) |
 +---------------------------------+
 | NULL                            |
 | NULL                            |
 | NULL                            |
 | NULL                            |
 | NULL                            |
 | NULL                            |
 | NULL                            |
 | NULL                            |
 | NULL                            |
 | NULL                            |
 | NULL                            |
 | NULL                            |
 +---------------------------------+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值