MySQL删除比当前日期更早的行

时间:2014-04-26 13:37:27

标签: php mysql

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

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

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

以下是我的sql语句示例:

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

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

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

3 个答案:

答案 0 :(得分:0)

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

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

如果您使用其他格式并且我制作了另一个代码段,请告诉我。

答案 1 :(得分:0)

请尝试使用此代码并告诉我其结果:

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

答案 2 :(得分:0)

我怀疑您的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()

请点击此处查看how to compose a date format string