我的数据库中有一个可以为空的 DATETIME 值“some_date”。当我尝试以下查询时,对于那些日期为空的行,它什么也不返回:
SELECT *
FROM tabel
WHERE DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW()
我可以编辑此查询,以便即使 some_date 为空,DATE_ADD() 也会生成 DATE?
您可以使用 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()
使用以下查询可能更清楚一些:
SELECT *
FROM tabel
WHERE some_date IS NULL OR DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW()