我有以下查询,返回最小值,最大值,平均值和额外值。有时,在extra_value结果列中,它返回一个单引号',然后在应用程序中稍后破坏我的代码。
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' '
有时它们并不取决于我在哪个表上运行查询。如何防止多余的报价永远发生?
答案 0 :(得分:1)
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
没有最后一个单引号吗?会再次发生吗?
答案 1 :(得分:1)
将每个值用单引号引起来,而不是使用分隔符:
249998
请注意,没有 GROUP_CONCAT( (CASE WHEN contact_timestamp > '2018-09-24 12:10:37'
THEN CONCAT('''', id, '''')
END) SEPARATOR ',') AS extra_value
作为参数的CONCAT()
。唯一的双引号添加在ID周围。唯一的逗号在值之间。