我有一个创建日期和结束日期列的表。所有元素都具有日期创建值,但不一定是结束日期值,可以为null。我想通过查询这些日期来获取行。我应该如何编写查询,以便显示创建日期和结束日期之间的行以及结束日期为空的数据?
答案 0 :(得分:1)
使用此:
WHERE IF(end_date IS NULL, @date > date_created, @date BETWEEN date_created AND end_date)
答案 1 :(得分:1)
一种选择是使用布尔OR
运算符。
目前尚不清楚您在谓词中提供的确切日期值。此示例使用DATE(NOW())
返回当前日期。
SELECT ...
FROM mytable t
WHERE t.date_created <= DATE(NOW())
AND ( t.end_date >= DATE(NOW()) OR t.end_date IS NULL )
还有其他查询模式将返回相同的结果,但它们都归结为同样的事情。 (经常使用的另一种方法是将值替换为NULL值。例如,如果end_date
为NULL,我们使用一个已知值,它将导致我们想要的布尔值TRUE:
SELECT ...
FROM mytable t
WHERE t.date_created <= DATE(NOW())
AND IFNULL(t.end_date,DATE(NOW())) >= DATE(NOW())