如何在mysql中获取两个日期之间的数据?

时间:2012-09-04 12:51:42

标签: 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-072012-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

编辑:根据作者的评论,问题是 - 如何计算所有日期,并在向日期范围传递时将其与月份分组,并将其与表格中的数据进行比较。

4 个答案:

答案 0 :(得分: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进行分组时,它正在跳过中间月份,但这对你来说是朝着正确方向迈出的一步。

答案 1 :(得分:0)

查看MySQL中的TIMESTAMPDIFF()函数。

这允许你做的是传递两个TIMESTAMP或DATETIME值(甚至DATE,因为MySQL将自动转换)以及你想要根据你的差异所用的时间单位。

您可以在第一个参数中指定MONTH作为单位:

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

答案 2 :(得分:0)

但你的问题并不清楚。但是我有这个给你。

您需要使用php从MySQL表中获取数据。然后你可以计算那里的日期差异。

您可以在How to calculate the difference between two dates using PHP?

参考此stackoverflow问题 http://php.net/manual/en/function.date-diff.php 以及有关date_diff的官方php文档

答案 3 :(得分:-3)

你可以在我的sql中使用between子句:

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

作为例子