MySQL 字符串拼接 concat、concat_ws、lpad、rpad、group_concat

MySQL中实现字符串拼接有以下几种方法:concat、concat_ws、lpad、rpad、group_concat,他们分别适用拼接字符串、用分隔符拼接、按照分组拼接、拼接后保留n位字符等不同场景。

一、拼接方式

拼接字符串方法的分类

二、具体用法

类型类别函数名描述
多列拼接成一列
拼接字符串
concat(str1,str2...strn)字符串 str1,str2 等多个字符串合并为一个字符串
用分隔符拼接
concat_ws(delimiter, str1,str2...strn)同concat(str1,str2,...) 函数,但是每个字符串之间要加上分隔符 delimiter
concat(str1,delimiter,...,delimiter,strn)字符串 str1,delimiter,str2 等多个字符串合并为一个字符串
拼接后保留n位字符
lpad(str1,length,str2)在字符串 str1 的开始处填充字符串 str2,使字符串长度达到 length
rpad(str1,length,str2)在字符串 str1 的结尾处添加字符串 str2,使字符串的长度达到 length
多行拼接成一列 按照分组拼接 group_concat(str1 order by str2 desc Separator str3)按照分组拼接字符串。distinct去重;order by子句用于组内排序;separator分隔符是一个字符串值,缺省为一个逗号。

扩展
前往查看:MySQL 字符串函数

三、实例

(1)多列拼接成一列。

select
#拼接多个字符串:
	concat('student', '学生', 12, '%'),						#student学生12%
#拼接多个字符串,并添加分隔符:
	concat_ws('+', 'student', '学生', 12, '%'),				#student+学生+12+%
	concat('student','+', '学生','+', 12,'+', '%'),			#student+学生+12+%
#将字符串 '12.45' 拼接到 '%' 字符串的开始处,最终保留5个字符:
	lpad('%',5,'12.45'),									#12.4%
#将字符串 '%' 拼接到 '12.45' 字符串的结尾处,最终保留5个字符:
	rpad('12.45',6,'%')										#12.45%

#输出结果:student学生12%|student+学生+12+%|student+学生+12+%|12.4%|12.45%

(2)按照分组拼接:多行拼接成一列

select
#按照学生姓名分组拼接字符串
	group_concat(name),											#李明,张三,孙华,刘平,孙华
#按照去重后的学生姓名分组拼接字符串
	group_concat(distinct name),								#刘平,孙华,张三,李明
#按照学生姓名分组拼接字符串, 拼接按照name升序的先后顺序
	group_concat(name order by name),							#刘平,孙华,孙华,张三,李明
#按照学生姓名分组拼接字符串,并添加分隔符';'
	group_concat(name Separator ';'),							#李明;张三;孙华;刘平;孙华
#按照学生姓名分组拼接字符串, 拼接按照name升序的先后顺序, 并添加分隔符';'
	group_concat(name order by name desc Separator ';'),		#李明;张三;孙华;孙华;刘平
#按照去重后的(学生姓名和成绩)分组拼接字符串, 拼接按照name升序的先后顺序, 并添加分隔符';'
	group_concat(distinct concat_ws('、',name,score) order by name desc Separator ';')											
																#李明、67;张三、74;孙华、90;孙华、87;刘平、56
from students

#输出结果:李明,张三,孙华,刘平,孙华|刘平,孙华,张三,李明|刘平,孙华,孙华,张三,李明|李明;张三;孙华;刘平;孙华|李明;张三;孙华;孙华;刘平|李明、67;张三、74;孙华、90;孙华、87;刘平、56

students 表 (id表示主键,name是姓名,score是平均成绩)

idnamescore
1李明67
2张三74
3孙华87
4刘平56
5孙华90

创建 students 表的代码

-- ----------------------------
-- Table structure for students
-- ----------------------------
DROP TABLE IF EXISTS `students`;
CREATE TABLE `students`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',
  `score` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '成绩',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of students
-- ----------------------------
INSERT INTO `students` VALUES (1, '李明', '67');
INSERT INTO `students` VALUES (2, '张三', '74');
INSERT INTO `students` VALUES (3, '孙华', '87');
INSERT INTO `students` VALUES (4, '刘平', '56');
INSERT INTO `students` VALUES (5, '孙华', '90');

非常荣幸您能阅读到最后,希望文章中的内容能够帮助到您。
本博客内容均为博主原创,未经授权,请勿转载,谢谢!

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值