我正在尝试选择上个月的所有数据到未来的所有月份...例如,我想选择从1月到数据库中未来可用日期的所有数据,任何月份..选择上个月直到今年的未来几个月
这是我的QUERY,它只从2月份开始,我怎样才能从上个月开始..当前月份 - 1不起作用
SELECT *
FROM events
WHERE YEAR(event_start_date) = YEAR(CURDATE())
AND MONTH(event_start_date) = MONTH(CURDATE())
答案 0 :(得分:0)
使用DATE_SUB()
选择上个月,>=
选择以后的所有数据:
SELECT *
FROM events
WHERE YEAR(event_start_date) = YEAR(CURDATE())
AND MONTH(event_start_date) >= MONTH(DATE_SUB( CURDATE(), INTERVAL 1 MONTH))
答案 1 :(得分:0)
尝试:
AND MONTH(event_start_date) = MONTH(DATE_SUB(CURDATE(), INTERVAL 1 MONTHS))
部分DATE_SUB(CURDATE(), INTERVAL 1 MONTH)
将从当前日期减去一个月。如果您想要上个月以及将来的所有内容,请使用:
AND MONTH(event_start_date) >= MONTH(DATE_SUB(CURDATE(), INTERVAL 1 MONTHS))
注意'> ='。虽然1月份有一个边缘案例,但你必须到处走走。最好的方法可能是这样的:
WHERE event_start_date >= DATE_SUB(DATE_SUB(CURDATE(), INTERVAL 1 MONTHS), (DAYOFMONTH(CURDATE)) DAYS)
从上个月1日起,这将为您提供一切。没有边缘案例。
答案 2 :(得分:0)
试试这个
SELECT *
FROM events
WHERE YEAR(event_start_date) = YEAR(CURDATE())
AND MONTH(event_start_date) >= MONTH(CURDATE() - INTERVAL 1 MONTH);
答案 3 :(得分:0)
SELECT *
FROM events
WHERE event_start_date >= '1/'+MONTH(DATE_SUB( CURDATE(), INTERVAL 1 MONTH))+'/'+YEAR(DATE_SUB( CURDATE(), INTERVAL 1 MONTH))
答案 4 :(得分:0)
对于性能,您可能希望在event_start_date
列上进行索引范围扫描操作。这意味着(显然),您需要一个以event_start_date
作为前导列的索引。
要获得索引范围扫描,谓词需要位于裸event_start_date
列,而不是函数。
WHERE event_start_date >= some_value
对于这种情况下的“some_value”,您可以使用的一个可能的表达式是:
CAST(DATE_FORMAT(NOW()+INTERVAL -1 MONTH ,'%Y-%m-01') AS DATE)
获取当前日期和时间,减去一个月,然后将日期和时间组件设置为该月的第一个午夜。