【发布时间】:2009-09-02 01:31:32
【问题描述】:
我有一个包含一堆日期的数据库。我想,给定一个日期,获取数据库中的下一个日期和数据库中的上一个日期。
因此,给定一个包含 10/10/09、10/12/09 和 10/15/09 的数据库,如果有人输入日期 10/13/09,它应该返回 10/12/09 作为上一个日期和 10/15/09 作为下一个日期。
我该怎么做?谢谢!
【问题讨论】:
我有一个包含一堆日期的数据库。我想,给定一个日期,获取数据库中的下一个日期和数据库中的上一个日期。
因此,给定一个包含 10/10/09、10/12/09 和 10/15/09 的数据库,如果有人输入日期 10/13/09,它应该返回 10/12/09 作为上一个日期和 10/15/09 作为下一个日期。
我该怎么做?谢谢!
【问题讨论】:
您可以使用两个查询轻松做到这一点:
-- get previous date
SELECT MAX(DateField) WHERE DateField < '2009-10-13';
-- get next date
SELECT MIN(DateField) WHERE DateField > '2009-10-13';
如果你在 DateField 上有一个索引,那么这个查询也会非常高效。
【讨论】:
您还可以使用它轻松地返回整个记录,而不仅仅是日期。
-- 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
注意,前面的顺序是按日期降序排列的,后面的顺序是升序排列的。
【讨论】:
LIMIT 而不是TOP。