Mysql 查询日期差异天数

Mysql queries for date difference in days

这里需要帮助,有一个 mysql table 叫做 APPROVAL,那里有一个 id,dateandtimelevel, i 需要一个单独选择 id 和以下条件的查询。

单独从数据库中获取日期并将其与当前系统日期进行比较,如果天数超过 30 和低于 60 并且 level = 5.

我如何为此编写查询。

提前致谢。

希望我正确理解了您的问题。

select `ID`
from APPROVAL
where `Level` = 5
    and ( DATE(`DateTime`) > curdate() + interval 30 day 
        and DATE(`DateTime`) < curdate() + interval 60 day )
order by `ID` asc;

其中 DATE() gets the date from a datetime and CURDATE() 是当前系统日期。使用 interval,您可以操作日期表达式而不必担心它的限制。

好的,所以使用此查询检索所有匹配级别 5 且与当前日期相比日期差异在 30 到 60 之间的 ID。

SELECT id
FROM APPROVAL
WHERE level = 5 && DATEDIFF(NOW(), dateandtime) BETWEEN 30 AND 60

我建议您也按日期 DESC 订购。

希望对您有所帮助

MySQL 具有良好的日期算法。例如,表达式

 CURDATE() + INTERVAL 30 DAY

给出一个日期时间值,表示 30 天后的午夜。同样

CURDATE()  + INTERVAL 61 DAY 

在第 61 天的午夜生成。

所以查询形式

   SELECT ID
     FROM APPROVAL
    WHERE Level = 5
      AND `DateTime` >=  CURDATE() + INTERVAL 30 DAY
      AND `DateTime` <   CURDATE() + INTERVAL 61 DAY

会产生你想要的。请注意使用 >= 作为天数范围的开始,使用 < 和额外的一天作为范围的结束。我们这样做是因为我们想要第 60 天的所有项目,以及第 61 天的 none。

(Level, DateTime) 上的复合索引将使此查询非常有效地满足。

注意像

这样的表达式
    DATE(`DateTime`) <=   CURDATE() + INTERVAL 60 DAY  /* slow! */

也会产生正确的结果,但是对要搜索的列调用 DATE() 函数使其成为 unsargeable。即使得MySQL无法使用索引来满足搜索