-3

表字段结构:

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 between2012-07-07 and2012-09-30 and tdate between2012-07-07 and2012-09-30 这样

预期输出:

month  Days
07     43
08     53
09     30

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

4

4 回答 4

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 分组时,它正在跳过中间月份,但这对您来说是朝着正确方向迈出的一步。

于 2012-09-04T13:18:14.817 回答
0

看看 MySQL 中的 TIMESTAMPDIFF() 函数。

这允许您做的是传递两个 TIMESTAMP 或 DATETIME 值(甚至是 MySQL 将自动转换的 DATE)以及您想要基于差异的时间单位。

您可以在第一个参数中指定 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
于 2012-09-04T13:00:09.397 回答
0

你的问题虽然不清楚。但我有这个给你。

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

您可以参考这个 stackoverflow 问题如何使用 PHP 计算两个日期之间的差异?以及关于http://php.net/manual/en/function.date-diff.phpdate_diff的官方 php 文档

于 2012-09-04T13:03:17.363 回答
-3

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

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

举个例子

于 2012-09-04T12:53:51.690 回答