我正在嘗試使用以下語句檢查上個月發生的所有記錄。mySQL - 上個月的全部
Select * from statistics
where statistics_date
BETWEEN date_format(NOW() - INTERVAL 1 MONTH, '%Y-%m-01')
AND last_day(NOW() - INTERVAL 1 MONTH)
但是,選擇不包括最後一天。我想要的是從本月的第一秒到本月的最後一秒。
我正在嘗試使用以下語句檢查上個月發生的所有記錄。mySQL - 上個月的全部
Select * from statistics
where statistics_date
BETWEEN date_format(NOW() - INTERVAL 1 MONTH, '%Y-%m-01')
AND last_day(NOW() - INTERVAL 1 MONTH)
但是,選擇不包括最後一天。我想要的是從本月的第一秒到本月的最後一秒。
BETWEEN
是日期和時間戳記的工作出了名的壞,因爲它得到的結束日期是錯誤的。
這裏有您需要什麼:
首先,讓我們來計算,即當前月的第一天。你完全正確。
DATE_FORMAT(NOW(),'%Y-%m-01')
接下來,讓我們來計算最後一個月的第一天:
DATE_FORMAT(NOW(),'%Y-%m-01') - INTERVAL 1 MONTH
現在,我們選擇在於在區間的記錄。
Select *
from statistics
where statistics_date >= DATE_FORMAT(NOW(),'%Y-%m-01') - INTERVAL 1 MONTH
and statistics_date < DATE_FORMAT(NOW(),'%Y-%m-01')
你怎麼看日期範圍的開始選擇與>=
與<
結束了嗎?您是否看到我在本月的第一天是如何在日期範圍結束時使用的?這些事情很重要,因爲時間戳可以有幾天和幾天的時間。考慮時間戳'2013-01-31 23:58'。這恰好是之後'2012-01-31'所以之間不會捕捉它。
where MONTH(statistics_date) = MONTH(NOW()) - 1
這隻考慮同一個月,但不是同一年。 – Augusto
'ang on。這項工作在二月份,但不在一月份。它也適用於多年數據集。因此downvote。 –
你是對的。哎呀,對不起 – paul