MySQL删除早于当前日期的行


MySQL Delete Row That Is Older Than The Current Date

我正在尝试删除数据库中开始日期早于当前日期的事件。

我使用了NOW语句,它删除了我表中的所有内容。

数据库每天都会更新事件,我想删除已经通过的事件。

下面是我的sql语句示例:

mysql_query("DELETE FROM Detroit WHERE Detroit.startDate < CURDATE()");

startDate是数据库中存储所有日期信息的列的名称。

日期显示为2014年4月25日星期五19:00:00。当我在语句中使用CURDATE或NOW日期选项时,整个表都会被删除。如何删除日期早于当前日期的行?

我怀疑startDate列不是日期时间字段,而是varchar。

这个查询应该有效:

DELETE FROM Detroit
WHERE STR_TO_DATE(startDate, '%a, %e %b %Y') < CURDATE()

或者你可以尝试用%d代替%e。但是,最好使用DATETIME列而不是VARCHAR列来存储日期和时间,因此您应该创建一个新列startDatedt并以这种方式更新表:

UPDATE Detroit
SET startDatedt = STR_TO_DATE(startDate, '%a, %e %b %Y %H:%i:%S')

然后你可以使用日期和时间函数来删除你需要的行:

DELETE FROM Detroit WHERE startDatedt < CURDATE()

请看一下这里,看看如何组成日期格式字符串。

如果您使用的是UNIX时间戳(1970年1月1日之后的秒,此格式始终为UTC),则可以使用以下代码:

mysql_query("DELETE FROM Detroit WHERE Detroit.startDate < ".time());

如果你使用另一种格式,我会制作另一个代码片段,请告诉我。

试试这个代码,让我知道它的结果,请:

mysql_query("DELETE FROM Detroit WHERE DATEDIFF(CURDATE(),startDate) > 0");