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

时间:2019-05-13 09:51:14

标签: mysql sql-delete

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

我尝试了几件事,但是没有用:/

我尝试查询的一个示例:

DELETE FROM roompasswords WHERE timestamp > NOW()

3 个答案:

答案 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的格式。

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

因此,您要在此处执行的操作是将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();