我需要在两个日期之间进行查询,这很容易,但我如何选择是否,例如date_end是:0000-00-00
(这意味着没有结束)
SELECT COUNT(*) FROM news WHERE NOW() BETWEEN data_start
/* and if data_end > 0000-00-00 */ AND data_end
感谢。
答案 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))