表字段结构:
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
编辑:根据作者的评论,问题是 - 如何计算所有日期,并在向日期范围传递时将其与月份分组,并将其与表格中的数据进行比较。
答案 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';
作为例子