Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql查询-日期范围内的日期范围_Mysql_Sql_Date - Fatal编程技术网

MySql查询-日期范围内的日期范围

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

我使用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 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
,因为这样我们有时会搞砸,认为有一些重叠。这里的负数表示“不,日期范围没有重叠;它们错过了这么多。”