我必须过滤从当天开始的 SQL 结果并显示直到当天 + 10 天的所有记录。因此,如果是 12 月 22 日,我应该显示从那天开始的所有记录,而不是 1 月 1 日之后的记录。我怎样才能做到这一点?我尝试了一个像下面这样的简单查询,但它似乎只显示当前月份最后一天的记录,而不是显示下一年的记录,而是回到当年的第一个月。
SELECT *
FROM mytable
WHERE DAY(mydatefield) >= DAY(CURRENT_TIMESTAMP)
AND mydatefield <= DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 10 DAY)
编辑 1
我正在使用 Symfony 2 + Doctrine 2 querybuilder 所以查询必须与它们兼容
编辑 2
我通过使用 eggyal 建议的查询和这段 PHP 代码解决了 Doctrine 2 问题
$queryBuilder->where($queryBuilder->expr()->gte('mydatefield', 'CURRENT_DATE()'))->andWhere($queryBuilder->expr()->lte('mydatefield', 'DATE_ADD(CURRENT_DATE(), 10, \'DAY\')'));
最佳答案
问题出在你错误的使用了MySQL的DAY()
函数,返回一个月中的第几天。您应该改用 DATE()
;您还可以使用 BETWEEN ... AND ...
进行简化比较运算符:
SELECT *
FROM mytable
WHERE DATE(mydatefield) BETWEEN CURDATE() AND CURDATE() + INTERVAL 10 DAY
请注意,为了从索引优化中获益,您可以改为:
SELECT *
FROM mytable
WHERE mydatefield >= CURDATE() AND mydatefield < CURDATE() + INTERVAL 11 DAY
关于php - 使用 SQL 筛选日期范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13994536/