【问题标题】:MySql Query- Date Range within a Date RangeMySql 查询 - 日期范围内的日期范围
【发布时间】:2011-07-05 21:27:00
【问题描述】:

我使用 mySql 5 和 IIS。
我有products,它有一个start date 字段和一个end date 字段。

我需要运行一个查询,该查询将获取用户输入的开始和结束日期,并输出产品在日期范围内运行的天数。

例子:

Offer1 - July 1 2011 thru July 31 2011
Query - July 1 2011 thru Sept 15 2011

结果 = 31

Example:
Offer1 - July 1 2011 thru July 31 2011
Query - July 1 2011 thru July 15 2011

结果 = 15

【问题讨论】:

    标签: mysql sql date


    【解决方案1】:

    如果您的products 有一个start_date 和一个end_date,而您的查询有一个qstart_date 和一个qend_date,那么我们需要之间的天数:

    GREATEST(start_date, qstart_date)
    

    LEAST(end_date,qend_date)
    

    。在 MySQL 中,我认为这看起来像

    1 + DATEDIFF ( 'd' , GREATEST(start_date, qstart_date) , LEAST(end_date,qend_date) ) 
    

    你会想忽略负数,用“0”代替它们。

    【讨论】:

    • +1:如果开始和结束反转,也可以将 DATEDIFF 包装在 ABS 中。
    • @Chris:您还需要为此结果添加 +1。事实上,你会得到31-1 = 30
    • @OMG Ponies 我们不能使用ABS,因为那样我们有时会搞砸并认为有一些重叠。这里的负数表示“不,日期范围没有重叠;他们错过了这么多。”
    猜你喜欢
    • 1970-01-01
    • 2014-01-07
    • 2011-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    相关资源
    最近更新 更多