在 MySQL 中删除早于当前日期时间的条目

DELETE entry that is older than current datetime in MySQL

我在其他各种陈述中尝试了以下内容,但认为其中一个显然应该有效,但到目前为止运气不好。请告诉我我做错了什么。没有收到错误,它只是不工作。

DELETE FROM table_name WHERE from < NOW()
DELETE FROM table_name WHERE from < '2022-04-16 08:00:00'

Example

您不应使用保留的 SQL 关键字(例如 FROM)来命名您的列(或其他数据库对象)。也就是说,一旦我们转义 from 列,您的两个查询都是有效的:

DELETE FROM table_name WHERE `from` < NOW();
DELETE FROM table_name WHERE `from` < '2022-04-16 08:00:00';

你在这里做了很多题。 首先 'from' 是保留关键字。所以请把这个词换成别的东西,以避免将来出现问题。 请将它们转换成时间戳。您正在做的是将它与字符串 eg.'2022-04-16 08:00:00' 进行比较。而且您必须知道 NOW() 返回的是什么。如果您转换时间戳中的所有内容,您将获得一个整数来进行比较。或者使用日期相关的功能。 另一件事,该列的数据类型是什么?

由于 from 是一个保留字,您必须对其名称进行转义。或者最好将 column-name 更改为非保留关键字。

在 MySQL 中,您可以使用反引号或(如果您 MySQL-server 在 ANSI-mode 中是 运行 - 请参阅 https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html)使用 double-quotes

DELETE FROM table_name WHERE `from` < NOW();
DELETE FROM table_name WHERE "from" < NOW();

double-quotes 也与 PostgreSQL 一起使用(所以它更多 standard-SQL),而反引号仅用于 MySQL。