截断日期时间超过 n 天的表

Posted

技术标签:

【中文标题】截断日期时间超过 n 天的表【英文标题】:Truncate table with date time older than n days 【发布时间】:2018-04-25 10:46:58 【问题描述】:

我想truncate 带有日期时间子句的表中的一些记录。

This 链接有一个解决方案,但它对我不起作用。

TRUNCATE TABLE 'meter_to_sim_mapping' WHERE 'meter_to_sim_mapping'.'mapped_at' <=

在上面的 where 子句中,我想添加日期时间值。值为2018-04-02 16:03:52。查询应删除此日期之前的所有记录。

如何用日期时间截断表格?

任何帮助将不胜感激。

【问题讨论】:

不要使用 TRUNCATE,使用 DELETE TRUNCATE TABLE 完全清空一个表dev.mysql.com/doc/refman/5.7/en/truncate-table.html 检查我的答案。 【参考方案1】:

下面的例子可能对你有用:

DELETE FROM TABLE_NAME
WHERE DATE_COLUMN = DATE_SUB("2018-04-02 16:03:52", INTERVAL 10 DAY);

您可以根据需要进行相应更改。

参考:MySQL DATE_SUB() Function

【讨论】:

【参考方案2】:

你需要使用DELETE

DELETE FROM TABLE_NAME
WHERE DATE_COLUMN < NOW() - INTERVAL N DAY

DELETE FROM TABLE_NAME
WHERE CAST(DATE_COLUMN AS DATE) < STR_TO_DATE('1-01-2012', '%d-%m-%Y')  - INTERVAL N DAY

代替NOW(),您可以使用您的日期时间值

STR_TO_DATE('12-01-2014 00:00:00','%m-%d-%Y %H:%i:%s')

演示

http://sqlfiddle.com/#!9/4607a6/1

【讨论】:

我不想使用NOW()。我想给出一个日期,然后从中减去天数 这是我的查询DELETE FROM meter_to_sim_mapping` WHERE CAST(meter_to_sim_mapping.mapped_at AS DATE) 它给了我0 Rows affectedWarning Code : 1411 Incorrect datetime value: '2018-04-02' for function str_to_date 再次影响 0 行

以上是关于截断日期时间超过 n 天的表的主要内容,如果未能解决你的问题,请参考以下文章

Python:将字符串转换为日期时间,计算时差,选择时差超过3天的行

禁用结束日期不超过 10 天的日历 javascript

如何从日期为最后一天的表中选择多列?

Oracle SQL Where 子句查找超过 30 天的日期记录

Laravel Eloquent 查找日期超过 2 天的行

如何在 Oracle 的日期中添加一天的最后一小时?