我正在尝试删除数据库中开始日期早于当天的事件。
我使用了NOW语句,它删除了我表中的所有内容。
数据库每天都会更新事件,我想删除已经过的事件。
以下是我的sql语句示例:
mysql_query("DELETE FROM Detroit WHERE Detroit.startDate < CURDATE()");
startDate是db中存储所有日期信息的列的名称。
日期显示为2014年4月25日星期五19:00:00。当我在我的语句中使用CURDATE或NOW日期选项时,将删除整个表。如何删除日期早于当前日期的行?
答案 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()