参考链接: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,结果全部变成了null
select 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 |
+---------------------------------+