1

我的数据库中有一个可以为空的 DATETIME 值“some_date”。当我尝试以下查询时,对于那些日期为空的行,它什么也不返回:

SELECT * 
FROM tabel
WHERE DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW()

我可以编辑此查询,以便即使 some_date 为空,DATE_ADD() 也会生成 DATE?

4

2 回答 2

8

您可以使用 COALESCE 将 NULL 日期转换为其他日期,例如:

select *
from table
where date_add(coalesce(some_date, now()), interval some_seconds second) < now()

COALESCE返回它的第一个非 NULL 参数:

COALESCE(value, ...)
返回列表中的第一个非 NULL 值,如果没有非 NULL 值,则返回 NULL。

因此,您只需要决定要使用哪个日期来代替 NULL some_date


如果您对 NULL 的替换some_date将远远超过过去测试将始终通过,那么您可以使用:

where some_date is null
   or date_add(some_date, interval some_seconds second) < now()

如果它总是失败,那么:

where some_date is not null
  and date_add(some_date, interval some_seconds second) < now()
于 2011-11-06T18:27:34.090 回答
3

使用以下查询可能更清楚一些:

SELECT * 
FROM tabel
WHERE some_date IS NULL OR DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW()
于 2011-11-06T18:30:27.303 回答