我有一个DATETIME值“some_date”,可以在我的数据库中为null。当我尝试下面的查询返回没有为这些行与日期为空:MySQL DATE_ADD()DATE为空时
SELECT *
FROM tabel
WHERE DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW()
我可以编辑此查询,以便DATE_ADD()会产生日期,即使some_date为空?
我有一个DATETIME值“some_date”,可以在我的数据库中为null。当我尝试下面的查询返回没有为这些行与日期为空:MySQL DATE_ADD()DATE为空时
SELECT *
FROM tabel
WHERE DATE_ADD(some_date, INTERVAL some_seconds SECOND) < NOW()
我可以编辑此查询,以便DATE_ADD()会产生日期,即使some_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()
它测试了它,它工作。但是为什么?在WHERE条件下你说什么? – BigJ
The如果some_date没有被设置(null)或者它被设置,那么WHERE子句是真的,当它加上一些秒数小于当前时间时。 –
非常感谢您的先生:) – BigJ
它会变慢,因为没有索引可以用于此查询... – glglgl
仅供参考,我正在使用COALESCE(some_date,“2000-01-01 00:00:00 “) – BigJ