我需要从日期表中减去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是非商业)天)
答案 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找到解决这个问题的方法。您需要的是以编程方式解决此问题的一些帮助(使用存储过程或类似方法)。