php - 使用 SQL 筛选日期范围

标签 php mysql datetime symfony filter

我必须过滤从当天开始的 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/

相关文章:

php - 如何使用Post方法从android类执行php文件

mysql - 为什么这个检索 DateTime 字段等于指定值的记录的查询不起作用?

php - 使用 PHP 和 jquery 下载文件时显示下载进度

php - UTF-8贯穿始终

php - 显示具有某些特殊条件行的所有行

mysql - 归档 5 小时从表中随机记录,并将权重设为 1/4

python - 处理 ElasticSearch 最 Pythonic 的方法是什么?

MySQL 事务 : One Large Transaction against Multiple Small Transactions

python - 如何使用 pandas.date_range() 获取在指定开始日期和结束日期之间具有 n 个指定时间段(相等)的时间序列

Python:只需打印 datetime.now() 包括正确的时区