MySQL查询。我可以在WHERE子句中添加条件吗?

时间:2012-01-19 11:17:00

标签: mysql sql null

基本上,我正在做这样的事情:

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为空,则为&gt; date(now()),如果第一个条件也适用,则应检索这些记录:date(now()) >= a.dateFrom

感谢您的帮助

5 个答案:

答案 0 :(得分:1)

select a.name from schedule as a where curdate() <= ifnull(a.dateTo,curdate());

答案 1 :(得分:0)

您可以使用andor逻辑运算符:

where date(now()) <= a.dateTo
      OR a.dateTo is null

答案 2 :(得分:0)

我没有测试它,但像

SELECT a.name FROM schedule as a WHERE (a.dateTo IS NOT NULL AND date(now()) <= a.dateTo)

应该有效

答案 3 :(得分:0)

怎么样:

SELECT a.name FROM schedule AS a WHERE date(NOW()) <= a.dateTo AND a.dateTo IS NOT NULL

我认为这会奏效。

答案 4 :(得分:0)

我不完全确定我理解你希望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)

不确定哪个更有效率。