基本上,我正在做这样的事情:
select a.name from schedule as a
where date(now()) <= a.dateTo;
但是a.dateTo
可以为空。所以,我想用一个查询来做这样的事情:
select a.name from schedule as a
where date(now()) <= a.dateTo IF a.dateTo is not null;
这只是一种简单的方式来解释我正在努力实现的目标。
有什么想法吗?
更新:
下面的例子可能会更好地了解需要什么
select a.name from schedule as a
where date(now()) >= a.dateFrom and
date(now()) <= a.dateTo;
如果我添加OR a.dateTo is null
,我认为它将覆盖第一个条件:date(now()) >= a.dateFrom
,这不是所需的查询。使用AND
也会发生类似的情况。
如果a.dateTo
为null,则它将是>date(now()),因此如果第一个条件也适用,则应该检索这些记录:date(now()) >= a.dateFrom
感谢您的帮助
select a.name from schedule as a where curdate() <= ifnull(a.dateTo,curdate());
您可以使用and
和or
逻辑运算符:
where date(now()) <= a.dateTo
OR a.dateTo is null
怎么样:
SELECT a.name FROM schedule AS a WHERE date(NOW()) <= a.dateTo AND a.dateTo IS NOT NULL
我认为这会奏效。
我没有测试过它,但有点像
SELECT a.name FROM schedule as a WHERE (a.dateTo IS NOT NULL AND date(now()) <= a.dateTo)
应该工作
我不完全确定我是否理解您希望NULL
值的行为,但也许这对您有用:
SELECT a.name
FROM schedule AS a
WHERE DATE(NOW()) >= a.dateFrom
AND DATE(NOW()) <= COALESCE(a.dateTo, NOW());
但这实际上和说是一样的
SELECT a.name
FROM schedule AS a
WHERE DATE(NOW()) >= a.dateFrom
AND (a.dateTo IS NULL OR DATE(NOW()) < a.dateTo)
不确定哪种更有效。