1

我需要在两个日期之间进行查询,这很容易,但是我该如何选择,例如 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

4 回答 4

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 的回答是一个很好的“ hack fix

于 2012-05-01T12:04:44.877 回答
2

为什么你可以这样做:

SELECT COUNT(*) FROM news 
WHERE data_start <= NOW() AND (data_end >=NOW() OR data_end ='0000-00-00')
于 2012-05-01T11:59:41.027 回答
1

你很接近:

SELECT COUNT(*) FROM news 
WHERE 
  data_start<=NOW()
  AND (data_end='0000-00-00' OR data_end>=NOW())
于 2012-05-01T12:02:27.100 回答
0

这应该可以工作,尽管您可能想检查服务器上的日期格式:

SELECT COUNT(*) FROM news WHERE NOW() BETWEEN data_start AND IsNull(data_end, cast('1/1/9999' as datetime))
于 2012-05-01T12:04:12.220 回答