2008-12-27 54 views
1

我有一個DATETIME字段。我想選擇上週已更新的所有記錄。現在,我使用這個查詢:MySQL DATETIME問題

SELECT SUM(mins_spent) as time_sum FROM todos WHERE 
lastUpdate >= '2008-12-22' AND lastUpdate <='2008-12-28' 

但結果我得到似乎是根據一天的時間,例如在晚上7點我可能會17小時在下午11點I'l得到14個不同小時,即使它應該增加,而不是減少。我正在考慮將查詢更改爲:

SELECT SUM(mins_spent) as time_sum FROM todos WHERE 
lastUpdate >= '2008-12-22 00:00:00' AND lastUpdate <='2008-12-28 00:00:00' 

它會有幫助嗎?建議請。

回答

5

'2008-12-22'應該等於'2008-12-22 00:00:00'

你想「直到第28天結束?」如果是這樣,請在第二天添加23:59:59
或者,您可以使用lastUpdate < "2008-12-29"

如何跟蹤現有ToDo的更改? INSERT和/或DELETE?或者UPDATE

如果您是「完成時」的記錄,則只會有更少的記錄。

如果你是UPDATE'ing,你是否允許日期改變到當前星期之後?如果是這樣,他們會從您的結果中刪除。要查看發生了什麼,您可以嘗試抓取表格上的一些聚合,mins_spentlastUpdate(標記值並偶爾運行以查看它們如何變化)。

SELECT count(*) AS Total 
FROM todos 
WHERE lastUpdate >= '2008-12-22' AND lastUpdate <= '2008-12-28 23:59:59' 

SELECT min(mins_spent) AS Min, max(mins_spent) AS Max, avg(mins_spent) AS Avg 
FROM todos 
WHERE lastUpdate >= '2008-12-22' AND lastUpdate <= '2008-12-28 23:59:59' 

SELECT min(lastUpdate) AS Min, max(lastUpdate) AS Max 
FROM todos 
WHERE lastUpdate >= '2008-12-22' AND lastUpdate <= '2008-12-28 23:59:59' 
+0

我想要它從第22天開始第28天開始。現在我更新記錄,一旦完成了待辦事項,我將其標記爲「完成」,並且不再觸摸。所以我非常肯定,它不會在完成時更新 – 2008-12-27 06:43:46

1

從MySQL 6.0參考手冊Date and Time Types來看,你應該書面或多或少確定。但是,如果它確實不起作用,那麼你可能會發現一個可報告的錯誤。 00:00'

DATE值是通過將時間部分作爲'00強制爲DATETIME類型。要通過忽略DATETIME值的時間一部分,而不是執行比較,使用CAST()函數來執行下列方式比較:「< =」

date_col = CAST(NOW() as DATE); 

你的查詢說2008-12- 28' ;這應該嚴格低於,不低於或等於。

一個很好的觀點是:你所寫的表達式被當作DATETIME(因爲LHS是DATETIME列)還是DATE(因爲RHS最好被當作DATE),或者確實如此DATETIME轉換爲一個字符串以匹配RHS?如果LHS被轉換爲DATE,那將會有所不同,因爲28日的任何時間都會在範圍內,而你似乎希望從21日到27日的所有事情都能得到滿足。如果使用強制類型明確修正類型,會發生什麼情況?

另外,MySQL服務器是否與您在同一時區運行?在你看到的和名義上的一天結束之間似乎有一個「每小時一次」的差異?我仍然不確定究竟是如何(錯誤)工作,但它可能是一個不明原因的因素。