直到今天,當我使用MySQL並需要使用日期/時間執行操作時,我使用的是具有unix時間戳的int列,並且沒有問題,但今天閱讀了一些指南後,我決定測試時間戳列默認爲「current_timestamp」。MySQL根據current_timestamp選擇上個月的數據
因此,我很感興趣如何選擇上個月的數據列的信息是在「2012-09-07 00:23:30」格式?也許有一些棘手的疑問,從本月開始會給我什麼數據(不是最近30天,而是從09-01 00:00:00到今天)?
直到今天,當我使用MySQL並需要使用日期/時間執行操作時,我使用的是具有unix時間戳的int列,並且沒有問題,但今天閱讀了一些指南後,我決定測試時間戳列默認爲「current_timestamp」。MySQL根據current_timestamp選擇上個月的數據
因此,我很感興趣如何選擇上個月的數據列的信息是在「2012-09-07 00:23:30」格式?也許有一些棘手的疑問,從本月開始會給我什麼數據(不是最近30天,而是從09-01 00:00:00到今天)?
這會給你的最後一個月:
WHERE dateColumn BETWEEN SUBDATE(CURDATE(), INTERVAL 1 MONTH) AND NOW();
這從本月開始:
WHERE dateColumn BETWEEN STR_TO_DATE('2012-09-01', '%Y-%m-%d') AND NOW();
之間是沒有什麼特別的,它只是
dateColumn <= ... AND dateColumn >= ....
快捷方式
嗯,我猜NOW()比較實際上並不需要,因爲所有的記錄都會在現在。
所以只是做:
WHERE dateColumn >= STR_TO_DATE('2012-09-01', '%Y-%m-%d')
當月的動態啓動:
WHERE dateColumn >= CURDATE() - INTERVAL DAY(CURDATE())-1 DAY
這一切確實是從當前日期中提取月份的一天,然後減去了好些日子少一個從中。
你應該看看common_schema,很容易安裝,有很多偉大的工具,其中包括一個名爲start_of_month()
功能正是你在找什麼:
select *
from your_table
where your_column >= common_schema.start_of_month(now())
不久前我遇到了類似的問題,最終通過服務器端語言計算日期(在這種情況下,PHP,但任何將允許你這樣做)。無論如何,也對此感興趣:) – jribeiro
@jribeiro發表了一個答案,看看。 – Ariel