[英]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.