我的DATETIME值“some_date”在我的数据库中可以为null。当我尝试以下查询时,它不返回日期为null的那些行:
SELECT *
FROM tabel
WHERE DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW()
我是否可以编辑此查询,以便即使some_date为null,DATE_ADD()也会产生DATE?
答案 0 :(得分:6)
您可以使用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()
答案 1 :(得分:3)
使用以下查询可能会更清楚一些:
SELECT *
FROM tabel
WHERE some_date IS NULL OR DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW()