使用 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 问题的主要内容,如果未能解决你的问题,请参考以下文章