2012-04-03 70 views
1

我需要一個SQL條件從昨天上午6:00到今天上午7:00之間創建的表中獲取行。該表有一個creationDate字段。Sql從昨天的回合中獲取所有記錄

這是我的想法

select * 
from myTable 
where creationDate = DATE_SUB(CONCAT(CURDATE()), INTERVAL 1 DAY) 

我使用MySQL服務器5的方法還我的時間是不是就creationDate領域,這是對所謂的開始時間分離領域。

+6

請告訴我們您正在使用的數據庫。 – 2012-04-03 08:37:14

+0

我正在嘗試這樣的事情:creationDate = DATE_SUB(CONCAT(CURDATE(),\'00:00:00'), INTERVAL 1 DAY) – richardalberto 2012-04-03 08:39:18

+0

我正在使用mysql服務器5 – richardalberto 2012-04-03 08:46:07

回答

5

測試,它的工作原理(這裏假設你的creationDate列的類型是時間戳):

select * from mytable 
where 
creationDate between concat(date(date_sub(now(), interval 1 day)), ' 06:00:00') and concat(date(now()), ' 07:00:00') 

注意在時間值前面的空格,即'06:00:00'

編輯原因的進一步規範在評論:

SELECT * FROM mytable 
WHERE 
(creationDate >= date(date_sub(now(), interval 1 day)) AND creationTime >= '06:00:00') 
AND 
(creationDate <= date(now()) AND creationTime <= '07:00:00') 

是的,它需要這種笨拙了,因爲如果你只想寫類似的信息(僞)

...WHERE creationDate between today and yesterday AND creationTime between '06:00:00' and '07:00:00' 

您將獲得1小時的時間跨度今天和昨天。

+0

好吧這看起來不錯,我認爲它可以工作,但我有我的時間字段在一個分離的字段叫startTime ...你能修改你的答案,以適應這一點?謝謝... – richardalberto 2012-04-04 07:14:05

+0

這工作謝謝:) – richardalberto 2012-04-05 09:11:19

0

嘗試這樣做:

select * 
from myTable 
where creationDate > DATE_SUB(CURDATE(), INTERVAL 25 HOUR); 
+0

這將返回整個一天...正如我在我的問題中指出,我需要從昨天早上6點到今天早上7點 – richardalberto 2012-04-03 09:07:00

+0

我認爲這裏的問題是,這是一個表,每個表生成記錄分鐘。如果我沒有定義6:00 a.m作爲起點,我會返回我不需要這個報告的記錄。謝謝您的幫助。 – richardalberto 2012-04-03 09:21:42

+0

@RichardGonzálezAlberto所以在小時間間隔工作,我的編輯能幫助你嗎? – 2012-04-03 09:48:21

0

嘗試此查詢

select * 
from myTable 
where creationDate >= 
DATE_SUB(concat(DATE_FORMAT(NOW(), %Y-%m-%d), ' 07:00:00'), INTERVAL 25 HOUR) 
AND 
creationDate <= concat(DATE_FORMAT(NOW(), %Y-%m-%d), ' 07:00:00') 
+0

謝謝...如果我有我的時間在一個分開的字段叫做開始時間? – richardalberto 2012-04-04 07:15:10

+0

你想要什麼替換creationDate或代替NOW()你想StartDate?如果你想startDate而不是NOW()在上面的查詢中用startDate替換它。 – 2012-04-04 08:52:21