如何删除时间戳早于现在的行?
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 的格式即可。
所以你在这里要做的是将你的 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();
基本上,我用时间戳填充一行 => '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 的格式即可。
所以你在这里要做的是将你的 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();