如何在MySQL GROUP_CONCAT中将分隔符作为变量传递?

时间:2018-11-19 03:57:37

标签: mysql group-concat

我想将SEPARATOR的{​​{1}}值作为变量(或函数参数)传递,但是此代码将失败

GROUP_CONTACT

我知道我可以做类似的事情

SET @sep = ' ';
SELECT
    `group`,
    GROUP_CONCAT( `field` ORDER BY `idx` SEPARATOR @sep ) `fields`
FROM `table`
GROUP BY `group`;

但是拥有更简洁的语法会更好。


编辑:

SELECT
    `group`,
    SUBSTRING(
      GROUP_CONCAT( CONCAT(`field`,@sep) ORDER BY `idx` SEPARATOR ''),
      1,
      LENGTH(
        GROUP_CONCAT( CONCAT(`field`,@sep) ORDER BY `idx` SEPARATOR '')
      )-LENGTH(@sep)
    ) `fields`
FROM `table`
GROUP BY `group`;

简单一些,但不够令人满意。

1 个答案:

答案 0 :(得分:1)

您可以使用准备好的语句:

SET @sep = '**';
SET @sql = CONCAT('SELECT `group`, GROUP_CONCAT( `field` ORDER BY `idx` SEPARATOR "',
@sep, '") `fields` FROM `table` GROUP BY `group`');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

我在dbfiddle上创建了一个小型演示:

create table `table` (idx int auto_increment primary key, field varchar(10), `group` int);
insert into `table` (field, `group`) values
('hello', 4),
('world', 4),('today', 4),('hello', 3),('world', 3),
('hello', 5),('today', 5),('world', 5),('goodbye', 5)

准备好的语句的输出为:

group   fields
3       hello**world
4       hello**world**today
5       hello**today**world**goodbye