代码之家  ›  专栏  ›  技术社区  ›  user794846

查询结果返回单引号

  •  0
  • user794846  · 技术社区  · 6 年前

    下面的查询返回最小值、最大值、平均值和额外值。有时,在“额外值结果”列中,它会返回一个单引号,然后在应用程序的后面中断代码。

     SELECT MIN(IF (contact_timestamp <= '2018-09-24 12:10:37', contact_timestamp, NULL)) AS min_value,
         MAX(IF (contact_timestamp <= '2018-09-24 12:10:37', contact_timestamp, NULL)) AS max_value,
         AVG(IF (contact_timestamp <= '2018-09-24 12:10:37', MINUTE(contact_timestamp) * 60 + SECOND(contact_timestamp), NULL)) AS avg_value, 
         SUM(IF (contact_timestamp <= '2018-09-24 12:10:37', 1, 0)) AS count_value,
         CONCAT("'", GROUP_CONCAT(IF(contact_timestamp > '2018-09-24 12:10:37', id, NULL) SEPARATOR "' , '"), "'") AS extra_value
     FROM log_device_contact
     WHERE contact_timestamp > DATE_ADD('2018-09-24 12:10:37', INTERVAL -8 DAY)
    

    有时“服务器结果”列的结果如下:

      '31504708' , '31504709' , '31504710' , '31504711' , '31504712' , '31504713' , '31504714' , '31504715' , '31504716' , '31504717' , '31504718' , '31504719' , '31504720' , '31504721' , '31504722' , '31504723' , '31504724' , '31504725' , '31504726' '
    

    有时,它们并不取决于我在哪个表上运行查询。不管怎样,我该如何防止额外报价的发生?

    2 回复  |  直到 6 年前
        1
  •  1
  •   Lelio Faieta    6 年前
    CONCAT("'", GROUP_CONCAT(IF(contact_timestamp > '2018-09-24 12:10:37', id, NULL) SEPARATOR "' , '"), "'") AS extra_value
    

    在concat中添加最后一个单引号。如果你这样做会怎么样?

    CONCAT("'", GROUP_CONCAT(IF(contact_timestamp > '2018-09-24 12:10:37', id, NULL) SEPARATOR "' , '")) AS extra_value
    

    没有最后一个单引号?又发生了吗?

        2
  •  1
  •   Gordon Linoff    6 年前

    将每个 价值 在单引号中,而不是使用分隔符:

     GROUP_CONCAT( (CASE WHEN contact_timestamp > '2018-09-24 12:10:37'
                         THEN CONCAT('''', id, '''')
                    END) SEPARATOR ',') AS extra_value
    

    注意没有 CONCAT() 具有 GROUP_CONCAT() 作为一个论点。仅在ID周围添加单引号。值之间只有逗号。