MySql查询-日期范围内的日期范围
我使用mySql 5和IIS。MySql查询-日期范围内的日期范围,mysql,sql,date,Mysql,Sql,Date,我使用mySql 5和IIS。 我有产品,它们有一个开始日期字段和一个结束日期字段 我需要运行一个查询,该查询将采用用户输入的开始和结束日期,并输出产品在日期范围内运行的天数 例如: 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 J
我有
产品
,它们有一个开始日期
字段和一个结束日期
字段
我需要运行一个查询,该查询将采用用户输入的开始和结束日期,并输出产品在日期范围内运行的天数
例如:
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如果您的
产品
有一个开始日期
和一个结束日期
,并且您的查询有一个开始日期
和结束日期
,那么我们需要以下日期之间的天数:
GREATEST(start_date, qstart_date)
及
。在MySQL中,我认为这看起来像
1 + DATEDIFF ( 'd' , GREATEST(start_date, qstart_date) , LEAST(end_date,qend_date) )
您需要忽略负数,将其替换为“0”。如果您的
产品有开始日期和结束日期,并且您的查询有开始日期和结束日期,那么我们需要以下日期之间的天数:
GREATEST(start_date, qstart_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小马,我们不能使用ABS
,因为这样我们有时会搞砸,认为有一些重叠。这里的负数表示“不,日期范围没有重叠;它们错过了这么多。”+1:如果开始和结束颠倒,还可以将日期差异包装在ABS
中。@Chris:您还需要将+1添加到此结果中。实际上,你会得到31-1=30
@OMG小马,我们不能使用ABS
,因为这样我们有时会搞砸,认为有一些重叠。这里的负数表示“不,日期范围没有重叠;它们错过了这么多。”