【问题标题】:MySQL: How to add one day to datetime field in queryMySQL:如何在查询中向日期时间字段添加一天
【发布时间】:2011-02-18 03:00:39
【问题描述】:

在我的表中,我有一个名为 eventdate 的字段,格式为 datetime,例如 2010-05-11 00:00:00。

我如何进行查询,以便将 一天 添加到 eventdate,例如,如果今天是 2010-05-11,我想在 where 子句中显示以返回明天的所有记录日期。

更新:

我试过了:

select * from fab_scheduler where custid = 1334666058 and DATE_ADD(eventdate, INTERVAL 1 DAY)

但不幸的是,即使我添加大于 1 的间隔,它也会返回相同的记录。

结果:

2010-05-12 00:00:00

但我只想选择明天日期的记录。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你可以使用DATE_ADD()函数:

    ... WHERE DATE(DATE_ADD(eventdate, INTERVAL -1 DAY)) = CURRENT_DATE
    

    也可以用在SELECT语句中:

    SELECT DATE_ADD('2010-05-11', INTERVAL 1 DAY) AS Tomorrow;
    +------------+
    | Tomorrow   |
    +------------+
    | 2010-05-12 |
    +------------+
    1 row in set (0.00 sec)
    

    【讨论】:

    • @phpBOY:我认为你错过了 `= CURRENT_DATE` 部分。
    • 我试过这个select * from fab_scheduler where custid = 1334666058 and DATE(DATE_ADD(eventdate, INTERVAL 1 DAY)) = CURRENT_DATE 但现在它返回空结果集:(
    • 我个人会使用 CURDATE()
    • @phpBOY:你是对的。您必须使用-1 来匹配CURRENT_DATE。尝试使用更新后的查询。
    • @Daniel Vassallo:请您构建查询,我得到的是空记录集。谢谢
    【解决方案2】:

    可以使用 MySQL 特定的语法糖:

    SELECT ... date_field + INTERVAL 1 DAY
    

    看起来比 DATE_ADD 函数更漂亮

    【讨论】:

      【解决方案3】:

      试试这个,因为我会这样做:)

      SELECT * 
      FROM fab_scheduler
      WHERE custid = '123456'
      AND CURDATE() = DATE(DATE_ADD(eventdate, INTERVAL 1 DAY))
      

      【讨论】:

      • 我认为这行不通。 eventdate 永远不会等于 eventdate + 1 day。我想你打算在那里使用CURDATE()。
      【解决方案4】:

      如果您能够使用 NOW(),这将是最简单的形式:

      SELECT * FROM `fab_scheduler` WHERE eventdate>=(NOW() - INTERVAL 1 DAY)) AND eventdate<NOW() ORDER BY eventdate DESC;
      

      使用 MySQL 5.6+ 查询应该可以。根据 sql server,您可能需要使用 CURRDATE() 而不是 NOW() - 这是 DATE(NOW()) 的别名,将仅返回 datetime 数据类型的日期部分;

      【讨论】:

        【解决方案5】:

        你可以试试这个:

        SELECT DATE(DATE_ADD(m_inv_reqdate, INTERVAL + 1 DAY)) FROM  tr08_investment
        

        【讨论】:

          【解决方案6】:

          这个怎么样:

          select * from fab_scheduler where custid = 1334666058 and eventdate = eventdate + INTERVAL 1 DAY
          

          【讨论】:

            【解决方案7】:
            $date = strtotime(date("Y-m-d", strtotime($date)) . " +1 day");
            

            或者,更简单:

            date("Y-m-d H:i:s", time()+((60*60)*24));
            

            【讨论】:

            • 你没有指望夏令时。 mktime 会更好。
            猜你喜欢
            • 2011-05-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-10-30
            • 2014-03-05
            • 1970-01-01
            • 1970-01-01
            • 2018-05-31
            相关资源
            最近更新 更多