我在不同的列中有一个包含年份和月份的表格,我需要找到3个月前和现在之间的所有行。
SELECT * FROM `table`
WHERE DATE(CONCAT(`year`, '-', `month`, '-01')) >=
DATE_FORMAT(NOW() - INTERVAL 3 MONTH, '%Y-%m-01')
它看起来相当冗长,而且可能效率低下,因为这是一张非常大的表格。有更好的方法吗?
答案 0 :(得分:4)
当日期存储为单独的字段时,没有太多优化,但我会将您的查询重写为:
SELECT *
FROM `table`
WHERE STR_TO_DATE(`year`+ '-'+ `month` + '-01', '%Y-%m-%d') >= DATE_SUB(NOW(), INTERVAL 3 MONTH)
连接呈现year
和month
列的索引无用。
有关MySQL日期函数的更多信息,请参阅:http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
答案 1 :(得分:2)
好吧,我有同样的问题,我已经想到了我认为这个案例的解决方案。
SELECT *
FROM table
WHERE (month >= (month(curdate()) - 3 AND year >= year(curdate()))
AND (month >= month(curdate()) AND year >= year(curdate())))
假设您有名为年和月的列。