我需要在两个日期之间进行查询,这很容易,但是我该如何选择,例如 date_end 是:(0000-00-00
这意味着没有结束)类似于
SELECT COUNT(*) FROM news WHERE NOW() BETWEEN data_start
/* and if data_end > 0000-00-00 */ AND data_end
谢谢。
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 ”
为什么你可以这样做:
SELECT COUNT(*) FROM news
WHERE data_start <= NOW() AND (data_end >=NOW() OR data_end ='0000-00-00')
你很接近:
SELECT COUNT(*) FROM news
WHERE
data_start<=NOW()
AND (data_end='0000-00-00' OR data_end>=NOW())
这应该可以工作,尽管您可能想检查服务器上的日期格式:
SELECT COUNT(*) FROM news WHERE NOW() BETWEEN data_start AND IsNull(data_end, cast('1/1/9999' as datetime))