在两个日期内选择,其中未定义第二个日期

时间:2012-05-01 11:56:44

标签: sql date

我需要在两个日期之间进行查询,这很容易,但我如何选择是否,例如date_end是:0000-00-00(这意味着没有结束)

之类的东西
SELECT COUNT(*) FROM news WHERE NOW() BETWEEN data_start  
/* and if data_end > 0000-00-00 */ AND data_end

感谢。

4 个答案:

答案 0 :(得分:2)

你为什么这样做:

SELECT COUNT(*) FROM news 
WHERE data_start <= NOW() AND (data_end >=NOW() OR data_end ='0000-00-00')

答案 1 :(得分:2)

您应该将此字段设为可为空,而不是使用0000-00-00来表示无结束日期,并将值设置为NULL。这比将end_date设置为早期值更具逻辑意义。

仅仅因为没有news记录将以0000-00-00结尾,因此将其用作“无结束”值并不正确。例如,如果将来您需要计算新闻的平均日期范围,则使用0000-00-00会使您的结果出现偏差。

您可以通过执行以下操作更新所有当前记录:

UPDATE news
SET end_date=NULL
WHERE end_date='0000-00-00'

然后您可以运行如下查询:

SELECT COUNT(*)
FROM news
WHERE NOW()>=date_start
AND (NOW()<date_end OR date_end IS NULL)

如果您无法更改此设置,那么@Arion's answer就是一个很好的“hack fix

答案 2 :(得分:1)

你很亲密:

SELECT COUNT(*) FROM news 
WHERE 
  data_start<=NOW()
  AND (data_end='0000-00-00' OR data_end>=NOW())

答案 3 :(得分:0)

这应该可行,但您可能需要检查服务器上的日期格式:

SELECT COUNT(*) FROM news WHERE NOW() BETWEEN data_start AND IsNull(data_end, cast('1/1/9999' as datetime))