如何删除时间戳早于现在的行?

How can I remove rows where their timestamp older than now?

基本上,我用时间戳填充一行 => '1558180800' 例如。 我想删除所有时间戳大于现在的行,即当前时间戳。

我尝试了几件事但没有成功:/

我试过的一个查询示例:

DELETE FROM roompasswords WHERE timestamp > NOW()

DELETE FROM TABLE_NAME WHERE timestamp_field > CURRENT_TIMESTAMP;

试试这个:

DELETE FROM TABLE_NAME WHERE str_to_date(YOUR_FIELD, '%d/%m/%Y') > CURRENT_TIMESTAMP;

只需相应地更改 str_to_date 的格式即可。

也可以看看这篇文章:https://www.quora.com/I-have-a-date-column-in-varchar-format-How-can-i-change-it-to-date-format-in-mysql-workbench

所以你在这里要做的是将你的 varchar 列转换为最新的,然后你就不必改变你的 table。但最佳做法是为日期值设置一个 DateTime 列。

根据您给出的示例,“1558180800”的 timestamp 值是 UNIX_TIMESTAMP 格式。 NOW() returns '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() returns 当前日期 + 时间,因此如果您还想指定时间,您可以改为执行以下操作:

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();