从数据库中删除时MySQL Date_子问题(使用变量)

从数据库中删除时MySQL Date_子问题(使用变量),mysql,sql,linux,shell,variables,Mysql,Sql,Linux,Shell,Variables,我试图将select查询的结果保存到一个文件中,然后截断该数据库表。 对于备份,我运行一个查询,该查询使用一个shell变量来确定我需要备份多少天,它工作正常,我保存了一个文件,完全按照我希望的方式工作 SET @sql_text = CONCAT ( "SELECT * FROM databasename.tablename WHERE (datetimestamp < (NOW()) AND datetimestamp > (DATE_SUB(NOW(),INTERVAL ",$

我试图将select查询的结果保存到一个文件中,然后截断该数据库表。 对于备份,我运行一个查询,该查询使用一个shell变量来确定我需要备份多少天,它工作正常,我保存了一个文件,完全按照我希望的方式工作

SET @sql_text = CONCAT ( "SELECT * FROM databasename.tablename WHERE (datetimestamp < (NOW()) AND datetimestamp > (DATE_SUB(NOW(),INTERVAL ",$daysback," DAY))) into outfile 'filename-" , DATE_FORMAT( NOW(), '%Y%m%d%H%i') , ".csv'" , "FIELDS TERMINATED BY ',' " , "LINES TERMINATED BY '\n' ");
PREPARE s1 FROM @sql_text;
EXECUTE s1;
DROP PREPARE s1;
我得到了daysret1的正确值,表明daysret的值也是正确的。还尝试在查询中直接使用@daysret1,但即使这样也无济于事。 我已经尝试过各种不同的双引号,还有那些不在delete语句中的东西,但它就是不起作用。如果我直接使用一个数字而不是变量,那么这个命令很好,它只是与变量本身有关

另外,如果有语法错误,那么MySql实际上会显示在处理引号、逗号等时遇到的错误。在该查询中,但在我上面发布的命令中,没有发生任何事情,脚本挂起,并且没有从数据库中删除任何内容

请帮忙

PS:如果有更好的方法,那么我洗耳恭听。目前,这些语句在这样的块中运行

mysql -u$user -p$pass << EOF
....
....
EOF
您不需要使用CONCAT或PREPARE。在第二种情况下,它可以是:

mysql -u$user -p$pass <<EOF
DELETE FROM tablename
WHERE datetimestamp < DATE_SUB(NOW(), INTERVAL $daysret DAY)
EOF

这样做的一个优点是,您可以在脚本中放入set-x,它将在执行前显示行,并替换变量。然后,您可以查看变量是否有问题。

谢谢,我也尝试过,没有CONCAT for delete就无法开始工作。如果我使用一个值,比如说45而不是daysret,无论是否使用concat,都可以正常工作,我会看到表的大小减小,条目被删除,我有一个测试数据库,我正在尝试这个。所以基本上我想说的是,在完全相同的查询中,如果我使用实际值,它将正常工作,这就是我现在尝试使用此变量传递的值。您缺少mysql的数据库参数-您是否在.my.cnf中指定了默认数据库?在发布前尝试更改表名时,我编辑了原始代码,实际上我在查询中使用了databasename.tablename。编辑了原来的文章。没有在变量周围使用任何引号或逗号最终起作用了,虽然我仍然看不出有什么不同,但无论如何它现在起作用了。感谢您的帮助:
mysql -u$user -p$pass << EOF
....
....
EOF
mysql -u$user -p$pass <<EOF
DELETE FROM tablename
WHERE datetimestamp < DATE_SUB(NOW(), INTERVAL $daysret DAY)
EOF
mysql -u$user -p$pass -e "DELETE FROM tablename WHERE datetimestamp < DATE_SUB(NOW(), INTERVAL $daysret DAY)"