2011-07-11 204 views
2

我有一個表格,其年份和月份位於不同列中,我需要在3個月前和現在之間查找所有行。Mysql在日期和月份列之間獲取日期劃分

SELECT * FROM `table` 
WHERE DATE(CONCAT(`year`, '-', `month`, '-01')) >= 
      DATE_FORMAT(NOW() - INTERVAL 3 MONTH, '%Y-%m-01') 

它看起來很冗長,可能效率很低,因爲這是一個非常大的表。有一個更好的方法嗎?

+1

你爲什麼說效率低下? – Coffee

+1

如何將日期存儲爲日期? – bernie

+0

是的,創建一個新列並將整個日期存儲在一列中。分開它有沒有目的。 –

回答

4

沒有太多的優化時的日期存儲爲獨立的字段可以了,但我會重新寫你的查詢:

SELECT * 
    FROM `table` 
WHERE STR_TO_DATE(`year`+ '-'+ `month` + '-01', '%Y-%m-%d') >= DATE_SUB(NOW(), INTERVAL 3 MONTH) 

級聯呈現在yearmonth列無用索引。

有關的MySQL日期函數的詳細信息,請參閱:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html

2

嗯,我有同樣的問題,我已經想通了什麼,我認爲是這種情況的解決方案。

SELECT * 
FROM table 
WHERE (month >= (month(curdate()) - 3 AND year >= year(curdate())) 
     AND (month >= month(curdate()) AND year >= year(curdate()))) 

假設您有名爲year和month的列。

+0

而當你在一年內做它?例如。從2012年11月到2013年2月... – PeterB

相關問題