Ste*_*ano 3 php mysql datetime filter symfony
我必须从当天开始过滤SQL的结果并显示所有记录,直到当天+ 10天.因此,如果是12月22日,我应该显示当天开始的所有记录,而不是在1月1日之后.我怎样才能做到这一点?我尝试了一个简单的查询,如下面的那个,但它似乎只显示记录,直到当月的最后一天,然后而不是显示下一年的记录回到当年的第一个月.
SELECT *
FROM mytable
WHERE DAY(mydatefield) >= DAY(CURRENT_TIMESTAMP)
AND mydatefield <= DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 10 DAY)
Run Code Online (Sandbox Code Playgroud)
编辑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\')'));
Run Code Online (Sandbox Code Playgroud)
问题在于你错误地使用了MySQL的DAY()
函数,它返回了月中的某一天.你应该改用DATE()
; 您还可以使用BETWEEN ... AND ...
比较运算符进行简化:
SELECT *
FROM mytable
WHERE DATE(mydatefield) BETWEEN CURDATE() AND CURDATE() + INTERVAL 10 DAY
Run Code Online (Sandbox Code Playgroud)
请注意,为了从索引优化中受益,您可以改为:
SELECT *
FROM mytable
WHERE mydatefield >= CURDATE() AND mydatefield < CURDATE() + INTERVAL 11 DAY
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1276 次 |
最近记录: |