2013-05-04 83 views
4

我想從表格中提取前一天的記錄,但我沒有找到如何完全做到這一點。需要你的幫助,請..如何從mysql表中獲取前一天的記錄?

表:RECORD_DATA

id  creationDate  
1 | 2013-05-03 04:03:35 |  
2 | 2013-05-03 04:03:35 | 

現在我需要在2013年5月3日創建的所有記錄。時間可以是任何事情。所以我的查詢應該有LIKE運算符。

我正在使用下面的查詢,它給了我空集。

select creationDate from RECORD_DATA 
where creationDate LIKE DATE_SUB(STR_TO_DATE('2012-04-05','%d/%m/%Y'),INTERVAL 1 DAY); 
+0

SELECT * FROM RECORD_DATA WHERE'creationDate'> =日期() - 1和'creationDate' <日期(); – Shin 2013-05-04 09:11:34

回答

15

相當簡單,當與SQL完成,只需添加條件

WHERE creationDate BETWEEN CURDATE() - INTERVAL 1 DAY AND CURDATE() 

沒有必要creationDate轉換,因爲它已經是一個日期:)。我相信,這將是檢查它的最快方法(如果你瀏覽大型數據集,這將會很重要)。

+1

非常感謝。它像一個魅力。 – user001 2013-05-04 09:38:42

2

我想這應該這樣做:

SELECT * FROM RECORD_DATA WHERE `creationDate` >= CURDATE()-1 and `creationDate` < CURDATE(); 
+0

'DATE()'函數將DateTime轉換爲日期。它本身並沒有做任何事情。你可能想'CURDATE()'。 – Richard 2013-05-04 09:15:35

+0

啊我從內存中工作,更新了我的答案! – JMK 2013-05-04 09:16:57

2

這將使用creationDateINDEX如果有任何)。

SELECT * 
FROM TableName 
WHERE creationDate >= CURDATE() - INTERVAL 1 DAY AND 
     creationDate < CURDATE() 
+3

正確 - 但爲什麼不使用BETWEEN? – PeteGO 2013-05-04 09:16:04

0

可以使用

SELECT * 
FROM `tableName` 
WHERE DAY(created) = DAY(CURRENT_DATE - INTERVAL 1 DAY) 
+0

DAY是DAYOFMONTH的別名。 DAY('2016-02-01')= DAY('2016-03-01')= DAY('2016-04-01')等。https://dev.mysql.com/doc/refman/5.5 /en/date-and-time-functions.html#function_dayofmonth – baiano 2017-01-23 22:06:48