0

我需要从日期表中获取日期减去 3 天(具体为工作日)。下面是结构:

      日期工作日
      2013 年 1 月 1 日  
      13 年 1 月 2 日 N
      2013 年 1 月 3 日
      2013 年 1 月 4 日
      2013 年 1 月 5 日

假设如果todays日期是1/5/13那么我需要得到current_date - 3(营业)日,即1/1/13(因为 1/2/13 是非营业日)

4

3 回答 3

1

这可以通过所谓的“窗口”功能来完成。以下内容应该适用于所有(最近的)DB2 版本(但未经测试,因为我离开了我的实例):

SELECT calendar_date
FROM (SELECT calendar_date, ROW_NUMBER() OVER(ORDER BY calendar_date DESC) as rownum
      FROM Calendar
      WHERE calendar_date < CURRENT_DATE
            AND business_day = 'Y') c
WHERE ROW_NUM = 3

这应该导致2013-01-01.

如果你正在做很多类似的数学运算,我实际上建议为这类事情创建存储过程,比如addBusinessDays(calendar_date, days_to_add). 尽管您必须访问一个表才能使其工作,但您应该能够将其标记为DETERMINISTIC(好吧,假设编译器允许您摆脱它,并且那些日子不会突然切换......)

于 2013-01-22T04:25:13.470 回答
-1

我怀疑您是否可以仅使用 SQL 找到解决此问题的方法。您将需要一些帮助来以编程方式解决此问题(使用存储过程或类似方法)。

于 2013-01-20T03:58:06.067 回答
-1

如果是 MSSQL,那么你可以使用,

GETDATE() - 3

如果是 MYSQL,那么您可以在http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html查看日期函数

我相信CURDATE()它将适用于 MYSQL。

于 2013-01-20T03:44:28.017 回答