[英]Mysql get rows between date split between year and month columns
我有一张表,在不同的列中有年份和月份,我需要找到 3 个月前和现在之间的所有行。
SELECT * FROM `table`
WHERE DATE(CONCAT(`year`, '-', `month`, '-01')) >=
DATE_FORMAT(NOW() - INTERVAL 3 MONTH, '%Y-%m-01')
它看起来相当冗长,并且可能效率低下,因为这是一个非常大的表。 有一个更好的方法吗?
当日期存储为单独的字段时,没有太多优化,但我会将您的查询重写为:
SELECT *
FROM `table`
WHERE STR_TO_DATE(`year`+ '-'+ `month` + '-01', '%Y-%m-%d') >= DATE_SUB(NOW(), INTERVAL 3 MONTH)
连接使得对year
和month
列的索引变得无用。
For more info about MySQL date functions, see: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html
好吧,我遇到了同样的问题,我已经想出了我认为是这种情况的解决方案。
SELECT *
FROM table
WHERE (month >= (month(curdate()) - 3 AND year >= year(curdate()))
AND (month >= month(curdate()) AND year >= year(curdate())))
假设您有名为年和月的列。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.