日期之间的SQL,包括开始和结束日期

时间:2011-12-02 10:04:39

标签: mysql sql

所以我有这个:

 (CURDATE() BETWEEN start_date AND end_date) 

工作正常。

但是当CURDATE()是2011-12-02并且end_date是2011-12-02时会抓住这一行吗?

例如,我的s​​tart_date是2011-12-01 00:00:00,我的结束日期是2011-12-02 23:59:59

所以它只在日期介于两者之间时才有效,但如果它在end_date本身上,则不起作用。

或者它也应该检查时间,因为它仍然需要在2011-12-02 15:30:00时使用此查询进行选择。

我该怎么做?

6 个答案:

答案 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)和日期与时间(DATETIMETIMESTAMP)。

试试这个:

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