mysql CONCAT,CONCAT_WS,GROUP_CONCAT

CONCAT()

CONCAT()函数用于将多个字符串连接成一个字符串。

SELECT CONCAT('1', '2'); -- 12
SELECT CONCAT('1', ' ','2'); -- 1 2
SELECT CONCAT('1', NULL,'2'); -- null

CONCAT_WS

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。

SELECT CONCAT_WS('_','1','2'); -- 1_2
SELECT CONCAT_WS('_','1', ' ','2'); -- 1_ _2
SELECT CONCAT_WS('_','1', NULL,'2'); -- 1_2

GROUP_CONCAT

GROUP_CONCAT函数返回一个字符串结果,该结果由分组中的值连接组合而成。

SELECT
    one_name,
    GROUP_CONCAT(two_id)
FROM
    one
GROUP BY
    one_name

 示例:

CREATE TABLE `t_orders` (
  `id` int NOT NULL AUTO_INCREMENT,
  `userId` int DEFAULT NULL,
  `orderId` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `t_orders` VALUES ('1', '1', '100');
INSERT INTO `t_orders` VALUES ('2', '1', '101');
INSERT INTO `t_orders` VALUES ('3', '1', '102');
INSERT INTO `t_orders` VALUES ('4', '2', '200');
INSERT INTO `t_orders` VALUES ('5', '2', '201');
INSERT INTO `t_orders` VALUES ('6', '3', '300');
-- 普通查询
select userId as 用户ID, orderId as 订单 from t_orders;  
-- 以 userId 分组,把 orderId 字段的值打印在一行,逗号分隔
select userId as 用户ID, group_concat(orderId) as 订单 from t_orders group by userId;  
-- 以 userId 分组,把 orderId 字段的值打印在一行,分号分隔
select userId as 用户ID, group_concat(orderId separator ';') as 订单 from t_orders group by userId;
-- 以 userId 分组,把 orderId 字段的值打印在一行,降序排列
select userId as 用户ID, group_concat(orderId order by orderId desc) as 订单列表 from t_orders group by userId;

 

 

参考: http://www.mybatis.cn/archives/847.html

posted @ 2021-06-18 14:35  草木物语  阅读(106)  评论(0编辑  收藏  举报