【问题标题】:Given a date, how to get next and previous date in database给定日期,如何在数据库中获取下一个和上一个日期
【发布时间】:2009-09-02 01:31:32
【问题描述】:

我有一个包含一堆日期的数据库。我想,给定一个日期,获取数据库中的下一个日期和数据库中的上一个日期。

因此,给定一个包含 10/10/09、10/12/09 和 10/15/09 的数据库,如果有人输入日期 10/13/09,它应该返回 10/12/09 作为上一个日期和 10/15/09 作为下一个日期。

我该怎么做?谢谢!

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    您可以使用两个查询轻松做到这一点:

    -- get previous date
    SELECT MAX(DateField) WHERE DateField < '2009-10-13';
    -- get next date
    SELECT MIN(DateField) WHERE DateField > '2009-10-13';
    

    如果你在 DateField 上有一个索引,那么这个查询也会非常高效。

    【讨论】:

      【解决方案2】:

      您还可以使用它轻松地返回整个记录,而不仅仅是日期。

      -- Get previous date row
      SELECT TOP 1 OrderDate, ... FROM Table WHERE OrderDate < @MyDate ORDER BY OrderDate DESC
      -- Get Next date row
      SELECT TOP 1 OrderDate, ... FROM Table WHERE OrderDate > @MyDate ORDER BY OrderDate
      

      注意,前面的顺序是按日期降序排列的,后面的顺序是升序排列的。

      【讨论】:

      • +1 打败我。这确实是一种更好的方法,因为如果需要,您可以获取与这些日期相关的其他字段,并且性能是相同的。
      • 问题被标记为 mysql,这需要LIMIT 而不是TOP
      • 如果只给你年份或只给你年月,你怎么能做同样的事情?
      • @BinaryTales,我不太确定你在问什么。如果您只将年份和月份作为整数存储在表中,您可以做同样的事情。当然,因为这些描述性要差得多,所以你会得到一些不确定性。类似于:SELECT TOP 1 OrderYear, OrderMonth, ... FROM Table WHERE OrderYear
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      • 2012-12-11
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多