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 字符串函数
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%
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');
非常荣幸您能阅读到最后,希望文章中的内容能够帮助到您。
本博客内容均为博主原创,未经授权,请勿转载,谢谢!