2012-09-04 82 views
-3

表场结构:如何在mysql中的两个日期之间获取数据?

id fdate tdate name 
1 2012-07-07 2012-07-30 
2 2012-08-07 2012-09-30 
3 2012-07-17 2012-08-30 

这里

FDATE --->在表 tdate领域之一--->在表中的另一字段

我将通过像2012-07-07两个值和2012-09-30

我需要输出偏离以上范围:

你必须检查的情况类似下面fdate between 2012-07-07 and 2012-09-30 and tdate between 2012-07-07 and 2012-09-30像

预期输出:

month Days 
07  43 
08  53 
09  30 

编辑:根据作者评论的问题是 - 我如何统计所有的日子,并显示一个按月分组,当它传递一个日期范围,并将其与我的表中的数据进行比较。

+1

你到底在问什么? – Matt

+1

你是怎么得到'43,53,30'的? –

+0

您是否要求在给定日期范围的情况下给出天数总和,但是也受到表中行数据的约束? – Fluffeh

回答

3

我知道,这不会给你你想要的确切结果,但我认为这会帮助你在至少是朝着正确的方向:

mysql> create table dateTest (id int(2), fdate date, tdate date); 
Query OK, 0 rows affected (0.04 sec) 

mysql> insert into dateTest values(1, '2012-07-07', '2012-07-30'); 
Query OK, 1 row affected (0.00 sec) 

mysql> insert into dateTest values(1, '2012-08-07', '2012-09-30'); 
Query OK, 1 row affected (0.00 sec) 

mysql> insert into dateTest values(1, '2012-07-17', '2012-08-30'); 
Query OK, 1 row affected (0.00 sec) 

mysql> select month(tdate) as month, datediff(tdate, fdate) as tally from dateTest group by month(fdate), month(tdate); 
+-------+-------+ 
| month | tally | 
+-------+-------+ 
|  7 | 23 | 
|  8 | 44 | 
|  9 | 54 | 
+-------+-------+ 
3 rows in set (0.00 sec) 

正如你所看到的,它跳过中间的一个月,因为我通过FDATE分组,但它是您正确的方向迈出的一步。

+0

亚我知道了...谢谢你 –

+0

@SivaG高兴地指出你在右边方向。当你完成它的工作时,你是否愿意编辑我的答案(评论它是在我的请求上)还是用最终解决方案编辑你的问题,因为我认为这实际上是一个非常有趣的问题! – Fluffeh

+0

但是他们为什么给予否定的人 –

-3

你可以在我的SQL中使用的条款之间:

select * from tbl where datetime between '2012-07-07' and '2012-09-30'; 

为例

+2

你确定吗? –

+0

http://www.roseindia.net/sql/sqldate/mysql-date-between.shtml –

+0

这将选择行,但我认为OP希望统计他表格中的数据之间的日期。 – Fluffeh

0

看一看的TIMESTAMPDIFF在MySQL()函数。

这可以让你做什么传递两个TIMESTAMP或DATETIME值(甚至DATE,因为MySQL会自动转换)以及你希望根据自己的不同而改变的时间单位。

您可以指定每月的第一个参数的单位:

mysql>SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04') 
-- Outputs: 1 


mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01'); 
     -> -1 
mysql> SELECT TIMESTAMPDIFF(MINUTE,'2003-02-01','2003-05-01 12:05:55'); 
     -> 128885 
+0

TIMESTAMPDIFF()我试过了,但它应该检查表中的两个列像tdate和fdate我在我的问题中提到了什么 –

+0

你可以使用子查询 – shail

相关问题