【发布时间】:2019-04-21 10:17:25
【问题描述】:
我想将GROUP_CONTACT 的SEPARATOR 值作为变量(或函数参数)传递,但是此代码将失败
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`;
但最好有更简洁的语法。
编辑:
SELECT
`group`,
SUBSTRING(
GROUP_CONCAT( CONCAT(@sep,`field`) ORDER BY `idx` SEPARATOR ''),
LENGTH(@sep)+1
) `fields`
FROM `table`
GROUP BY `group`;
稍微简单一点,但不够满意。
【问题讨论】:
-
“要明确指定分隔符,请使用 SEPARATOR 后跟应插入组值之间的字符串文字值”。只接受字符串文字,不接受变量。参考:dev.mysql.com/doc/refman/8.0/en/…
-
为什么
LENGTH(@sep)+1是group_concat()的第二个参数?整数在那个位置有什么相关性? Stackoverflow 不是功能愿望清单的地方。 -
我投票结束这个问题,因为它似乎是一个功能愿望
-
@Used_By_Already
LENGTH(@sep)+1是SUBSTRING的第二个参数 -
@Used_By_Already,要求两种解决方法解释为什么只允许使用文字背后的基本原理。我认为公众可以从这个问题和答案中受益。
标签: mysql group-concat