2012-09-04 85 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

相關問題