查询获取具有条件的当前日期

时间:2013-01-20 02:50:10

标签: sql date db2 datediff

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

      date           business day
      1/1/13         Y  
      1/2/13         N
      1/3/13         Y
      1/4/13         Y
      1/5/13         Y

假设todays日期为1/5/13,那么我需要current_date - 3(业务)日1/1/13(因为1/2/13是非商业)天)

3 个答案:

答案 0 :(得分: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(好吧,假设编译器让您侥幸逃脱,并且那些日子不会突然切换......)

答案 1 :(得分:-1)

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

GETDATE() - 3

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

查看日期函数

我相信CURDATE()适用于MYSQL。

答案 2 :(得分:-1)

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