什麼是最有效的方式來獲得與落在00:00:00
昨天在23:59:59
昨日某處之間的時間字段中的所有記錄所有的MySQL記錄?從昨天
表:
id created_at
1 2016-01-19 20:03:00
2 2016-01-19 11:12:05
3 2016-01-20 03:04:01
昨天假設是2016年1月19日,那麼在這種情況下,所有我想要返回的行1和2
什麼是最有效的方式來獲得與落在00:00:00
昨天在23:59:59
昨日某處之間的時間字段中的所有記錄所有的MySQL記錄?從昨天
表:
id created_at
1 2016-01-19 20:03:00
2 2016-01-19 11:12:05
3 2016-01-20 03:04:01
昨天假設是2016年1月19日,那麼在這種情況下,所有我想要返回的行1和2
既然你只想找日期部分,你可以比較容易的使用MySQL's DATE()
function。請注意,如果您有大量的記錄,這可能是低效率的;索引優勢隨着衍生值DATE()
而丟失。
SELECT * FROM table WHERE DATE(created_at) = DATE(NOW() - INTERVAL 1 DAY);
使用: subdate(current_date, 1)
這對你的情況很棒!
這不會給我任何結果:'選擇MY_TABLE *其中created_at = SUBDATE(CURRENT_DATE,1);'你是怎麼這意味着要在查詢中使用? – eComEvo
'SELECT * FROM MY_TABLE其中created_at> SUBDATE(CURRENT_DATE,1);'' – pivanchy
SELECT * FROM MY_TABLE其中SUBDATE(CURRENT_DATE,1)和CURRENT_DATE之間created_at;'這個查詢將從00:00:00從獲取的所有數據直到昨天00:00:00今天(我的意思是24小時),因爲之前的查詢將返回昨天所有的數據,直到當前時間 – pivanchy
您可以使用subdate
表示「昨天」,並使用date()
來表明您想記錄,即只有列的日期部分匹配。所以:
SELECT *
FROM tablename
WHERE DATE(created_at) = SUBDATE(CURRENT_DATE(), INTERVAL 1 DAY)
,您仍然可以使用索引,如果你說
SELECT * FROM TABLE
WHERE CREATED_AT >= CURDATE() - INTERVAL 1 DAY
AND CREATED_AT < CURDATE();
奇怪的是,只有從今天而不是昨天返回記錄。 – eComEvo
你在什麼時區,以及與數據庫記錄相比如何?我可以向你保證,'SELECT DATE(NOW() - INTERVAL 1 DAY)'將選擇昨天的日期! – miken32
'SELECT @@ global.time_zone,@@ session.time_zone;'只是給了我兩個值的'SYSTEM'。當我檢查數據庫系統上的TZ時,它是UTC,而我的是EST。查詢最終只能從遠程系統上的腳本運行,所以我認爲這應該不是問題。 – eComEvo