Php 使用SQL筛选日期范围

Php 使用SQL筛选日期范围,php,mysql,datetime,symfony,filter,Php,Mysql,Datetime,Symfony,Filter,我必须过滤从当天开始的SQL结果,并显示直到当天+10天的所有记录。因此,如果是12月22日,我应该显示从那天开始的所有记录,而不是1月1日之后的记录。我该怎么做?我尝试了下面这样一个简单的查询,但它似乎只显示当前月份的最后一天之前的记录,而不是显示下一年的记录,而是返回到当前年度的第一个月 SELECT * FROM mytable WHERE DAY(mydatefield) >= DAY(CURRENT_TIMESTAMP) AND mydatefield <= DA

我必须过滤从当天开始的SQL结果,并显示直到当天+10天的所有记录。因此,如果是12月22日,我应该显示从那天开始的所有记录,而不是1月1日之后的记录。我该怎么做?我尝试了下面这样一个简单的查询,但它似乎只显示当前月份的最后一天之前的记录,而不是显示下一年的记录,而是返回到当前年度的第一个月

SELECT * 
FROM mytable 
WHERE DAY(mydatefield) >= DAY(CURRENT_TIMESTAMP) 
  AND mydatefield <= DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 10 DAY)

您应该能够使用以下功能:

SELECT * 
FROM mytable 
WHERE date(mydatefield) >= date(CURRENT_TIMESTAMP)
  AND date(mydatefield) <= date(DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 10 DAY))
选择*
从mytable
其中日期(mydatefield)>=日期(当前时间戳)

和日期(mydatefield)问题在于错误地使用了MySQL函数,该函数返回月份的日期。你应该使用;还可以使用比较运算符进行简化:

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
选择*
从mytable
其中mydatefield>=CURDATE()和mydatefield
试试这个

SELECT * 
FROM mytable 
WHERE DATE( mydatefield ) BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL 10 DAY

可能与+1重复。在比较中使用裸列(与包装在函数中)确实是实现性能调优的一种方法。使用
=
时,我忘了说我使用的是Doctrine 2和PHP,所以查询只能使用普通SQL。我需要一种在doctrine querybuilder中使用它的方法
SELECT * 
FROM mytable 
WHERE DATE( mydatefield ) BETWEEN CURRENT_DATE AND CURRENT_DATE + INTERVAL 10 DAY