基本上,我用时间戳=>'1558180800'来填充一行。 我想删除其时间戳大于当前时间戳的所有行。
我尝试了几件事,但是没有用:/
我尝试查询的一个示例:
DELETE FROM roompasswords WHERE timestamp > NOW()
答案 0 :(得分:0)
DELETE
FROM
TABLE_NAME WHERE
timestamp_field >
CURRENT_TIMESTAMP;
答案 1 :(得分:0)
尝试一下:
DELETE FROM TABLE_NAME WHERE str_to_date(YOUR_FIELD, '%d/%m/%Y') > CURRENT_TIMESTAMP;
只需相应地更改str_to_date的格式。
因此,您要在此处执行的操作是将varchar列强制转换为最新的日期,然后不必更改表。但是最佳实践是为日期值设置一个DateTime列。
答案 2 :(得分:0)
根据您给出的示例,timestamp
的值'1558180800'是UNIX_TIMESTAMP
格式。 NOW()
返回'YYYY-MM-DD hh:mm:ss'。因此,如果要直接翻译您的查询:
DELETE FROM roompasswords WHERE timestamp > NOW();
is equivalent to
DELETE FROM roompasswords WHERE timestamp > '2019-05-14 09:18:06';
因此,由于找不到特定的字段值,它将无法正常工作。因此,您需要将NOW()
更改为UNIX_TIMESTAMP
。下面是您可以尝试的示例:
1) DELETE FROM roompasswords WHERE timestamp > UNIX_TIMESTAMP(NOW());
请注意,NOW()返回当前日期和时间,因此,如果您还想指定时间,则可以执行以下操作:
2) DELETE FROM roompasswords WHERE timestamp > UNIX_TIMESTAMP('2019-05-14 00:00:00');
或者您可以先获取UNIX_TIMESTAMP值,然后将其用于DELETE查询:
SELECT UNIX_TIMESTAMP('2019-05-14 00:00:00'); -- will return '1557763200'
-- then
DELETE FROM roompasswords WHERE timestamp > '1557763200';
最后,此查询也将正常工作:
3) DELETE FROM roompasswords WHERE FROM_UNIXTIME(TIMESTAMP) > '2019-05-14 00:00:00';
or
DELETE FROM roompasswords WHERE FROM_UNIXTIME(TIMESTAMP) > NOW();