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

问题描述 投票:0回答:3

我已经尝试了以下各种其他陈述,但认为其中之一显然应该有效,但到目前为止还没有运气。请告诉我我做错了什么。没有收到错误,只是不起作用。

DELETE FROM table_name WHERE from < NOW()

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

Example

sql mysql sql-delete
3个回答
5
投票

您不应使用保留的 SQL 关键字(例如

FROM
)来命名列(或其他数据库对象)。话虽这么说,一旦我们转义
from
列,您的两个查询都是有效的:

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

1
投票

你在这里已经做了很多问题。 首先,“from”是一个保留关键字。所以请把这个词改成别的东西,以避免将来出现问题。 请将它们转换为时间戳。您正在做的是将其与字符串进行比较,例如'2022-04-16 08:00:00' 。而且您必须知道

NOW()
返回的是什么。如果你转换时间戳中的所有内容,你将得到一个整数来比较。或者使用日期相关的函数。 另一件事是该列的数据类型是什么?


1
投票

由于

from
是保留字,因此您必须转义它的名称。或者最好将列名更改为非保留关键字。

在 MySQL 中,您可以使用反引号或(如果您的 MySQL 服务器在 ANSI 模式下运行 - 请参阅 https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html)双引号

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

双引号也适用于 PostgreSQL(因此它是更标准的 SQL),而反引号仅适用于 MySQL。

© www.soinside.com 2019 - 2024. All rights reserved.