【问题标题】:Mysql Datediff queryMysql Datediff 查询
【发布时间】:2011-12-04 11:44:21
【问题描述】:

我需要从表格中获取结果,日期应该与当前日期相差 5。

即,specific_date 列存在于我的表中。日期格式为YYYY-MM-DD

我需要类似的查询,

SELECT * FROM `table_name` WHERE DATEDIFF(NOW(), specific_date) < 5

【问题讨论】:

    标签: mysql sql date time datediff


    【解决方案1】:

    您似乎正在尝试这样做:

    WHERE specific_date < (NOW() + 5 days)
    

    首先,仔细考虑边界情况。这些边界情况可能会在 SQL 中咬住你的脚踝。你真的想要

    WHERE specific_date <= (NOW() + 5 days)
    

    您的specific_date 列时间戳是否仅包含天数(即时间等于午夜的日期)还是包含日期和时间?如果你想得到你想要的结果,你需要注意这些细节。

    无论如何,试试这个:

    WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY)
    

    这是进行此类查找的好方法。列值独立于不等式谓词(&lt;=)的一侧,因此如果列上有索引,mySQL 可以进行索引范围扫描。

    MySQL 中的日期运算非常灵活。你可以这样做

       NOW() + INTERVAL 10 SECOND
       NOW() - INTERVAL 2 MINUTE
       NOW() + INTERVAL 4 HOUR
       CURDATE() - INTERVAL 1 WEEK /* midnight one week ago */
       LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH  /*first day of present month*/
       NOW() - INTERVAL 1 QUARTER
       CURDATE() - INTERVAL 5 YEAR
    

    等等。

    【讨论】:

    • 这也适用于小时吗?例如:WHERE specific_date &lt;= DATE_ADD(NOW(), INTERVAL 24 HOUR)
    • @ lcaeusD ,是的。然而更简单的方法是使用NOW() -/+ INTERVAL 1 YEAR/MONTH/DAY/HOUR/MINUTE/SECOND
    【解决方案2】:

    查看BETWEEN 运算符。

    expr BETWEEN min AND max
    

    另一种方法是使用DATE_SUB 运算符

    WHERE date_column > DATE_SUB(NOW(), INTERVAL 5 DAY)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多