如何從mysql中的當前日期時間中減去30天?如何從mysql中的當前日期時間減去30天?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
如何從mysql中的當前日期時間中減去30天?如何從mysql中的當前日期時間減去30天?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
SELECT * FROM table
WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add
讓爲你失去任何查詢緩存或優化,因爲查詢每次都是不同的不使用NOW()
。請參閱MySQL documentation中不應使用的功能列表。
在下面的代碼中,我們假設這張表隨着時間而增長。新的東西被添加,你想顯示在過去30天的東西。這是最常見的情況。
請注意日期已添加爲字符串。最好從你的調用代碼中以這種方式添加日期,而不是使用NOW()
函數,因爲它會殺死緩存。
SELECT * FROM table WHERE exec_datetime >= DATE_SUB('2012-06-12', INTERVAL 30 DAY);
您可以使用BETWEEN
,如果你真的只是想的東西就在這個第二個30天在此之前很第二,但是這不是一個常見的情況在我的經驗,所以我希望簡化查詢可以爲你服務好。
所以你建議不要使用'NOW()'並且仍然在你的答案中使用它。 o_O PS:您的查詢將返回**另一個**結果,而不是OP可能想要的結果 – zerkms
@zerkms此查詢如何產生與查詢不同的結果集? – user784637
@ user784637:uhm,'BETWEEN'和'> ='是不同的操作符,你知道嗎?我的查詢限制了「30天前和今天」的結果集,這是「30天前後的所有內容」。所以'明天'記錄不匹配我的和你原來的查詢,但會匹配這個答案 – zerkms
的MySQL減去從現在天:
select now(), now() - interval 1 day
打印:
2014-10-08 09:00:56 2014-10-07 09:00:56
爲了誰不希望使用DATE_SUB
,使用CURRENT_DATE
:
SELECT CURRENT_DATE - INTERVAL 30 DAY
如果可以的話,我會給這個+10。 SQL應該都是關於可讀性的,並且這是執行此操作最可讀的方式。 –
比使用NOW() - INTERVAL 30 DAY更具可讀性但不同的結果。由於問題提到「從當前**日期時間減去30天**」,這可能不是OP想要的。 –
另一方式
SELECT COUNT(*) FROM tbl_debug WHERE TO_DAYS(`when`) < TO_DAYS(NOW())-30 ;
如果您只需要日期,而不是使用時間:
select*from table where exec_datetime
between subdate(curdate(), 30)and curdate();
由於curdate()
省略時間部分,它比now()
更快potentially並在那裏你只能是案件多「語義正確」對日期感興趣。
另外,subdate()
的2值過載可能比使用interval
更快。 interval
適用於您需要非日間組件的情況。
所以,你聲稱'subdate(curdate(),30)'比'CURRENT_DATE - INTERVAL 30 DAY'要糟嗎?你有證據嗎?那會有多快?幾微秒? –
@ypercube,哇,這個評論如何得到+5票,一天...你做了什麼?另外,我在帖子中澄清說它「可能更快」。 – Pacerier
我不知道。我當然不能贊成我自己的評論。關於「潛在」更快的主張,我仍然看不到任何證據,決定性或間接性。即使速度稍快,條件也會被評估一次。除非您每分鐘運行查詢數百萬次,否則差異將無關緊要。 –
SELECT date_format(current_date - INTERVAL 50 DAY,'%d-%b-%Y')
您可以通過在SQL中使用日期格式進行格式化。
您還可以使用
select CURDATE()-INTERVAL 30 DAY
真棒!謝謝 – deFreitas