使用 DATEADD 从数据库中删除记录的 SQL 问题

Posted

技术标签:

【中文标题】使用 DATEADD 从数据库中删除记录的 SQL 问题【英文标题】:SQL Trouble using DATEADD to delete records from database 【发布时间】:2014-03-15 09:20:51 【问题描述】:
$datediff = "DELETE FROM table1 * WHERE date = DATEADD(day,-1,CURDATE())";
$link->query($datediff);

我正在尝试使用 DATEADD 删除我的数据库中的表中从 CURDATE 一天前的所有记录。但是,当使用上述代码时,我 无法成功删除这些记录。日期是使用 CURRENT_TIMESTAMP 放入我的数据库中的。

我试过了: - 使用“dd”代替“day” - 在单词“day”周围加上单引号 - 使用 CURDATE() 的替代方法,例如 CURRENT_TIMESTAMP 和 GETDATE()

有没有人对尝试什么有任何建议,或者看到我做错了什么来阻止它工作?提前谢谢你。

【问题讨论】:

哪个rdbms?不能两者兼有 @Alexander rdbms 是什么意思? 我会更改查询,使其读取前一天午夜和前一天 23:59:59 之间的日期。 @nickatnite 关系数据库管理系统。基本上:您拥有哪个数据库,mysql 或 Sql Server。您为两者都标记了您的问题,但它们是不同的系统,您也可以在标签的说明中阅读(将鼠标悬停在它们上方)。 @GolezTrol 谢谢你的解释。我不知道。不过,这与 Sql Server 有关。我将更新标签以反映... 【参考方案1】:

使用间隔

DELETE 
  FROM table1 
 WHERE date = (current_timestamp() - INTERVAL 1 day);

第二个选项是DATESUB:

DELETE 
  FROM table1 
 WHERE date = DATESUB(current_timestamp(), INTERVAL 1 day);

另外,不需要*

附:此答案适用于 MySQL

【讨论】:

该死的......也许这是 MySQL 而不是 SQL Server。它起作用了..确定它是SQL Server。我该如何检查? 你用什么连接? MySQL...我明白了。谢谢【参考方案2】:

您没有报告名为DATE 的列的类型。如果此列是 TIMESTAMP,那么您的查询将不起作用,因为前一天的小时、分钟、秒组件与记录的组件不匹配。在这种情况下,您可以将列和比较值都 CAST() 或 CONVERT() 转换为 DATE,以便仅在年、月、日组件之间进行比较。

【讨论】:

他做到了。那应该是评论 不,他说 CURRENT_TIMESTAMP 用于放置记录。没有说列的类型是不是TIMESTAMP。

以上是关于使用 DATEADD 从数据库中删除记录的 SQL 问题的主要内容,如果未能解决你的问题,请参考以下文章

怎么用sql查询昨天,今天,明天和本周的记录

无法从 SQL Server CE 中删除记录

如何在没有日志的情况下删除SQL中表的大数据?

在java中使用sql DATEADD函数

使用日期字段使用sql server获取前一天记录

将 VB Date() 和 DateAdd 函数转换为 PHP