4

我试图在我的表中查找 6 个月前和今天之间的条目。这是我当前正在运行的查询:

WHERE (DATE(l.date_fin) BETWEEN DATE(DATE_ADD(NOW(), INTERVAL -6 MONTH)) AND CURDATE())

但是,它对我来说并不正确:感觉有一种更简洁和/或更快的方法可以获得与此查询相同的结果。有没有这样的方法?

4

4 回答 4

12

这应该足以得到你想要的:

WHERE l.date_fin > CURRENT_DATE() - INTERVAL 6 MONTH;
于 2012-07-31T10:01:41.917 回答
3

这样的事情怎么样?

SELECT l.date_fin FROM table WHERE TIMESTAMPDIFF(MONTH,l.date_fin,NOW()) < 6
于 2012-07-31T09:59:09.093 回答
1

简单的方法是:

WHERE DATE(l.date_fin) BETWEEN DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) AND CURRENT_DATE;

如果您在列上有索引,date_fin那么为了获得最佳性能,您可以使用:

WHERE l.date_fin BETWEEN CAST(DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) AS DATETIME) AND
    DATE_SUB(CAST(DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY) AS DATETIME), INTERVAL 1 MINUTE);
于 2012-07-31T10:45:07.700 回答
0
SELECT l.date_fin FROM table WHERE l.date_fin between current_date and  current_date+interval -6 month
于 2012-07-31T10:37:56.547 回答