我有一个像这样的SQL查询: -
REPLACE(
GROUP_CONCAT(
IF(
(timediff(delta_ts,creation_ts) > '03:00:00')
&& (priority='P5') ,bug_id,'')
),',,','' )
AS exceeded_bugs
from bugs
......
我得到的结果: -
exceeded_bugs: ,3743331,3743332,3743333
我需要不同的分隔符,因为Group concat的默认分隔符是“,”。我需要使用空格或“|”分隔错误或“ - ”符号。
我尝试过: -
REPLACE(
GROUP_CONCAT(
IF(
(timediff(delta_ts,creation_ts) > '05:00:00')
&& (priority='P6') ,bug_id,'')
)
,SEPARATOR '-' )
AS exceeded_bugs
from bugs
.....
我收到了错误: -
您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在'SEPARATOR' - '附近使用正确的语法,作为第1行的exceeded_bugs
请帮助使用不同的分隔符更正group concat的sql语法。
答案 0 :(得分:3)
不要在SEPARATOR之前使用逗号
首先,您未在separator
函数中包含group_concat
。
第二,你没有用替换功能做任何事情
编辑:
REPLACE(GROUP_CONCAT( IF( (timediff(delta_ts,creation_ts) > '03:00:00') && (priority='P5') ,bug_id,'') SEPARATOR '-'),',,','' ) as exceeded_bugs
答案 1 :(得分:0)
萨米尔的回答是在结果中添加了更多的连字符。我略微修改了查询,得到了确切的结果。
Samir的询问: -
select sum(
IF( (timediff(delta_ts,creation_ts) > '03:00:00')
&& (priority='P5') ,1,0)) P5_time_exceeded,
REPLACE(GROUP_CONCAT( IF( (timediff(delta_ts,creation_ts) > '03:00:00')
&& (priority='P5') ,bug_id,'') SEPARATOR '-'),',,','' ) as exceeded_bugs
from bugs
......
结果我得到了: -
P5_time_exceeded: 3 exceeded_bugs: ---3743331-3743332-3743333-------------------------- 1 row in set (0.00 sec)
修改后的查询
select sum(
IF( (timediff(delta_ts,creation_ts) > '03:00:00')
&& (priority='P5') ,1,0)) P5_time_exceeded,
REPLACE(GROUP_CONCAT( IF( (timediff(delta_ts,creation_ts) > '03:00:00')
&& (priority='P5') ,bug_id,'') SEPARATOR '-'),'---','' )
as exceeded_bugs
from bugs
where .....
得到了确切的结果: -
P5_time_exceeded: 3 exceeded_bugs: 3743331-3743332-3743333
我正在替换重复sybmol的最小倍数,用空格''代替,这样,重复符号就不会出现。
谢谢Samir。
答案 2 :(得分:0)
不确定是否需要REPLACE。
GROUP_CONCAT应忽略NULL字段,但如果要忽略NULL字段,则会出现空出现。而不是使用''尝试使用NULL代替。
像这样: -
SELECT SUM( IF( (TIMEDIFF(delta_ts,creation_ts) > '03:00:00') && (priority='P5') ,1,0)) AS P5_time_exceeded,
GROUP_CONCAT( IF( (TIMEDIFF(delta_ts,creation_ts) > '03:00:00') && (priority='P5'), bug_id, NULL) SEPARATOR '-') AS exceeded_bugs
FROM bugs
WHERE .....