MySQL:如何选择记录mysql两个日期之间的开始日期和结束日期

时间:2013-03-10 10:53:36

标签: mysql sql select

我需要选择一个房价,其中登记日期和退房日期在指定的日期范围之间。这些费率根据其条件单独命名。房费取决于所选日期。这是我的代码:

rate_eb

rate_name     rate_starts     rate_ends     rate_discount     rate_min_stay
---------------------------------------------------------------------------
Low Season    2013-05-01      2013-10-31    20                3            
High Season1  2013-11-01      2013-12-19    20                4
High Season2  2013-02-21      2013-04-31    20                4
Peak Season   2013-12-20      2014-02-20    20                5            

条件是:

  1. 预订必须介于 rate_starts rate_ends 之间。
  2. 总共夜晚必须大于或等于 rate_min_stay
  3. rate_discount 是来自另一个表的主费率的折扣百分比。如果主费率为100,则此预订将适用80.
  4. 现在,我想从rate_db获取具有日期范围的数据 - 尤其是对于rate_discount。这是我的mySQL:

    select rate_discount 
    from rate_eb 
    where rate_min_stay<='4' 
    and reb_starts>='2013-06-19' 
    and reb_ends<='2013-06-23'
    

    从上面的代码。我希望来自淡季的rate_discount = 20,但所有小于或等于4的费率都会被选中。

    现在,请告诉我解决方案。如何重写我的代码以访问rate_starts和rate_ends之间的rate_discount。

2 个答案:

答案 0 :(得分:2)

我假设访问者可以输入一个期间,而不仅仅是一个日期。如果那个时期的开始时间处于淡季并且旺季结束,会发生什么?您希望看到哪个比率?

select rate_discount 
from rate_eb 
where rate_min_stay <= abs( datediff( reb_date2, reb_date1 ) )
and reb_date1 between rate_starts and rate_ends
and reb_date2 between rate_starts and rate_ends

我假设reb_date1是访问者输入的开始日期,而reb_date2是结束日期。

答案 1 :(得分:0)

使用to_date('dateInString','format')将字符串转换为reb_date1和reb_date2的日期,如果你对rate_min_stay进行大于比较,则直接使用不带引号的数值