我需要在两个日期之间进行查询,这很容易,但是如何选择,例如date_end是:0000-00-00
(表示无结束) 类似在两个日期内选择,其中第二个未定义
SELECT COUNT(*) FROM news WHERE NOW() BETWEEN data_start
/* and if data_end > 0000-00-00 */ AND data_end
谢谢。
我需要在两个日期之间进行查询,这很容易,但是如何选择,例如date_end是:0000-00-00
(表示无结束) 类似在两个日期内选择,其中第二个未定义
SELECT COUNT(*) FROM news WHERE NOW() BETWEEN data_start
/* and if data_end > 0000-00-00 */ AND data_end
谢谢。
为什么你只是做:
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))
而不是使用0000-00-00
表示没有结束日期,您应该使该字段可以为空,并将值设置为t 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”
不要在日期数据类型中使用BETWEEN。使用'x> = start AND x
MatBailie