所以我有这个:
(CURDATE() BETWEEN start_date AND end_date)
工作正常。
但是当CURDATE()
是2011-12-02并且end_date
是2011-12-02时会抓住这一行吗?
例如,我的start_date是2011-12-01 00:00:00,我的结束日期是2011-12-02 23:59:59
所以它只在日期介于两者之间时才有效,但如果它在end_date
本身上,则不起作用。
或者它也应该检查时间,因为它仍然需要在2011-12-02 15:30:00时使用此查询进行选择。
我该怎么做?
答案 0 :(得分:26)
好吧,你可以试试
CURDATE() BETWEEN start_date AND DATE_ADD(end_date, INTERVAL 1 DAY)
答案 1 :(得分:4)
由于两列都是时间戳,因此您需要确保时间不会让您失望。 为了防止时间绊倒,请将时间戳转换为日期。
where current_date between cast(start_date as date)
and cast(end_date as date);
答案 2 :(得分:4)
也许这个问题的答案是指旧版MySql中的一个错误,因为between
是包容性的,这意味着它会在开始日期和结束日期之间获取行,而不是就在开始和结束前一天之间。
试试这个:
SELECT CURDATE() BETWEEN CURDATE() AND CURDATE();
结果为1
(即true
)。
我认为原始海报问题在于混合正确的日期(DATE
)和日期与时间(DATETIME
或TIMESTAMP
)。
试试这个:
SELECT NOW() BETWEEN CURDATE() AND CURDATE();
SELECT NOW() BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 1 DAY);
第一个选择的结果为0
,第二个选择的结果为1
。发生的事情是DATE
等同于DATETIME
零时间,所以除非NOW()
恰好在午夜调用,否则它将大于CURDATE()
并且超出BETWEEN
1}}陈述。
要使用DATE
函数仅阻止此DATETIME
DATE()
部分的测试:
SELECT DATE(NOW()) BETWEEN CURDATE() AND CURDATE();
答案 3 :(得分:2)
使用start_date <= CURDATE() AND end_date > CURDATE()
答案 4 :(得分:1)
它将起作用... BETWEEN
包含边界值。也就是说,
(CURDATE() BETWEEN start_date AND end_date)
包括start_date,end_date和介于
之间的任何一天CURDATE() BETWEEN start_date AND ADDDATE(CURDATE(), INTERVAL 1 DAY);
答案 5 :(得分:0)
强制转换(end_date - Start_date为双精度)* 86400