MySQL:在where子句中使用字段内容

MySQL: Use field content in where clause

假设我有一个 table,其中包含一个 date_last_action(日期时间)和一个 frequency(varchar)字段。后者包含表示有效 DATE_ADD 期间的字符串(例如:“1 WEEK”、“1 YEAR”)。

现在我想检索时间已过的所有记录。

这就是我正在尝试的:

SELECT * 
FROM `table` 
where DATE_ADD(`date_last_action`,INTERVAL `frequency`) < now()

这不起作用。我得到:

Error in query (1064): Syntax error near ') < now()'

我确定这与 frequency 有关。

如何做到这一点?

显然,我可以进行两次调用 - 首先检索频率,然后检查该行是否为 "outdated"。但我想如果我只希望匹配很少的记录,那将使用更多的资源。

不幸的是 MySQL 需要在 INTERVAL 之后有一个关键字,而不是任何字符串或数值。您可以通过使用 CASE 语句并使用不同的关键字给出不同的案例来实现您想要的。

举个例子,假设您想将具有适当单位的值添加到日期,那么 SQL 语句将如下所示:

SELECT CASE unit
       WHEN "DAY" THEN date_add(date, INTERVAL value DAY)
       WHEN "MONTH" THEN date_add(date, INTERVAL value MONTH)
       END
       AS newDate
FROM table

但是您需要另一列 unit!

也适用于 WHERE 子句...