MySQL中的字段拼接
本文举例简单说明以下三个函数
concat()
concat_ws()
group_concat()
1. 数据准备
/*Table structure for table `users` */DROP TABLE IF EXISTS `users`;CREATE TABLE `users` (`uid` int unsigned NOT NULL AUTO_INCREMENT,`name` varchar(24) DEFAULT NULL,`age` tinyint DEFAULT NULL,`class` int DEFAULT NULL,PRIMARY KEY (`uid`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;/*Data for the table `users` */insert into `users`(`uid`,`name`,`age`,`class`) values (1,'Jeremy',32,1),(2,'Melissa',32,1),(3,'Steve',12,2);
2. 函数详解示例
2.1 concat()函数
功能:将多个字符串连接成一个字符串。
语法:concat(str1, str2,...),返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
示例:
SELECTCONCAT(`name`, `uid`) AS resultFROM`USERS`;
结果:
如果想在字段间加分隔符,需要在每两个字段间都增加一个分隔符,比较麻烦,例如:
SELECTCONCAT(`name`, '~', `uid`) AS resultFROM`USERS`;
结果:
2.2 concat_ws()函数
功能:和concat()一样,将多个字符串连接成一个字符串,但是可以一次性指定分隔符~(concat_ws就是concat with separator)
语法:concat_ws(separator, str1, str2, ...)
说明:第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。
示例:
SELECTCONCAT_WS('---', `name`, `uid`) AS resultFROM`USERS`;
结果:
注意:和MySQL中concat函数不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL。
2.3 group_concat()函数
功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。
示例:
SELECTGROUP_CONCAT(`name`,`age`ORDER BY `uid` DESCSEPARATOR ';') AS resultFROM`USERS`WHERE `age` > 30;
结果:
上述SQL的语义为:查询age大于30的用户,按照uid的降序,使用分隔符';'将name和age字段拼接。
该函数中的distinct,order by,separator都可以省略,最简化的使用为:
SELECTGROUP_CONCAT(`name`) AS resultFROM`USERS`;
结果:
上述SQL的语义为:查询所有数据,并将name字段拼接。
TIPS:group_concat()函数通常与SQL的GROUP BY条件一并使用,例如:
SELECT`class`, GROUP_CONCAT(`name`) AS resultFROM`USERS`GROUP BY `class`;
结果:
3. 总结
