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

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

一、拼接方式

MySQL 字符串拼接 concat、concat_ws、lpad、rpad、group_concat_第1张图片

二、具体用法

类型 类别 函数名 描述
多列拼接成一列
拼接字符串
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是平均成绩)

id name score
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');

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

你可能感兴趣的:(mysql,数据库,java)