第 1 行的 mysql 错误 'NULL'

标签 mysql null

我在尝试执行此操作时遇到此错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1

似乎找不到问题所在。感激是否有人可以提供帮助

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;

最佳答案

如果 @sql 变量在第一个 select 语句之后仍然保持 NULL 值,那么稍后您将在执行 prepare 语句时遇到异常。

看下面使用 CONCAT 的 select 语句

SET @sql := NULL;选择 CONCAT('abc',@sql,'def');

结果为 NULL。尽管您可能希望结果为 abcdef

为了得到abcdef你需要这样做

SET @sql := NULL; SELECT CONCAT('abc',IFNULL(@sql,''),'def');

如果可以解决问题,您可以尝试以下任一方法:

要么

1) SET @sql := '';

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 行的 mysql 错误 'NULL',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37726751/

相关文章:

php mysql session 重定向到主页,用户名和密码错误

mysql 交叉更新表

C strchr 在 HPUX 上使用 NULL 值,但在 RHEL 上出现段错误

ios - 应该使用 nil 和 Nil 以及 ios 中的 Null 有什么区别?

sql - 如何使用空字符串具有空值的主键?

powershell - 您不能在空值表达式上调用方法 - 一般

null - 如何在 KDB 中用空格替换 Null?

mysql - SQL 查询检查列是否包含某些数据

mysql - 需要有关 MySQL 的帮助,我认为该 MySQL 涉及自连接

python - 尝试在 ubuntu 上为 django 设置 mysql 但出现错误 'django.db.utils.OperationalError: (1046, ' 未选择数据库')'