3

我有一个这样的 sql 查询:-

 REPLACE(
  GROUP_CONCAT( 
   IF( 
    (timediff(delta_ts,creation_ts) > '03:00:00')    
     && (priority='P5') ,bug_id,'')
     ),',,','' )
   AS exceeded_bugs
  from 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 行的超出错误

请帮助使用不同的分隔符更正组 concat 的 sql 语法。

4

3 回答 3

3

不要在分隔符前使用逗号

首先,您不包括separator内部group_concat功能。

其次,您没有使用替换功能进行任何操作

看看这里

编辑:

   REPLACE(GROUP_CONCAT( IF( (timediff(delta_ts,creation_ts) > '03:00:00') && (priority='P5') ,bug_id,'') SEPARATOR '-'),',,','' ) as exceeded_bugs
于 2013-06-27T10:36:56.020 回答
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                                                                                                                                  
超出错误:---3743331-3743332-3743333-------------------------                                                                           
一组中的 1 行(0.00 秒)

修改后的查询

 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
   超出错误:3743331-3743332-3743333

我将重复 sybmol 的最小倍数替换为空格 '',这样重复符号就不会出现。

谢谢萨米尔。

于 2013-06-27T11:41:40.073 回答
0

不确定您是否需要更换。

GROUP_CONCAT 应该忽略 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 .....
于 2013-06-27T13:38:55.950 回答