2011-07-11 160 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

相关问题