尝试执行此操作时出现此错误:
#1064 - 您的SQL语法出错;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 在第1行'NULL'附近
似乎无法找到问题所在。感谢是否有人可以提供帮助
SET @sql = NULL;
SELECT
GROUP_CONCAT(
DISTINCT CONCAT (
"SUM(IF(DATE(FROM_UNIXTIME(machine_stop)) = '",
DATE(FROM_UNIXTIME(machine_stop)),"' ,
(machine_start-machine_stop)/3600, 0)) AS ",
DATE(FROM_UNIXTIME(machine_stop))
)
) INTO @sql
FROM
downtime_data
WHERE
DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY;
SET @sql = CONCAT("SELECT
failure_code, ", @sql, "
FROM
downtime_data
WHERE
p.machine='HH1' AND
DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY
GROUP BY
failure_code,
DATE(FROM_UNIXTIME(machine_stop))"
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
答案 0 :(得分:3)
如果@sql
变量在第一个select语句之后仍然保持NULL
值,那么稍后您将在执行prepare语句时遇到异常。
使用CONCAT
SET @sql := NULL; SELECT CONCAT('abc',@sql,'def');
结果是NULL
。虽然您可能希望结果为abcdef
。
为了获得abcdef
,您需要这样做
SET @sql := NULL; SELECT CONCAT('abc',IFNULL(@sql,''),'def');
如果解决问题,您可以尝试以下任何一项:
要么
1)SET @sql := '';
OR
2)如果您想保留此行SET @sql = NULL;
,请更改最终查询的部分,例如SET @sql = CONCAT("SELECT failure_code ", IF(@sql IS NULL, '',CONCAT(',',@sql)),
这是最终查询:
SET @sql = CONCAT("SELECT
failure_code ", IF(@sql IS NULL, '',CONCAT(',',@sql)), "
FROM
downtime_data
WHERE
p.machine='HH1' AND
DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY
GROUP BY
failure_code,
DATE(FROM_UNIXTIME(machine_stop))"
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
答案 1 :(得分:0)
我明白了,在这种情况下查询中没有行
DATE(FROM_UNIXTIME(machine_stop)) >= DATE(NOW()) - INTERVAL 7 DAY
所以它返回NULL