如何在DB2中获得第一个工作日

时间:2017-09-06 07:57:08

标签: sql db2

我有以下要求,下面查询应该在3个条件下运行, 每日,每周和每月。

每日行应该每天输出, 每周应该只在星期六给出输出。 而每月应该在第一个工作日提供输出,但如果第一个是星期六,那么输出将是第3天,如果第一个是星期日,那么输出应该在第二天。

从表名中选择*给我的行数低于4行

Status  ID   COL1  COL2  
= = = = = = = = = = = = 
Daily   12    100  150.2
Daily   17     90  120.6
Weekly  24    180  50.6
Monthly 25    150  155.2

现在我想按照上述要求显示这些数据

我通过低于SQL获得了每日和每月的确切输出,但需要有关每月的帮助

Select * from Tablename
where
ID in (12,17) OR --daily
(DAYNAME(CURRENT DATE) = 'Saturday' AND ID = 24) --weekly
(TO_CHAR(DATE(CURRENT DATE)) = '01' AND ID = 25 AND DAYNAME(CURRENT DATE) NOT IN ('Saturday','Sunday')) --monthly

但我的每月逻辑没有给我预期的输出。

1 个答案:

答案 0 :(得分:1)

我注意到的第一件事是在每周线的末尾有一个缺失的OR - 我认为这只是一个错字。

我认为'每月'虽然线路需要更多的复杂性。尝试类似: -

Select * from Tablename
where
ID in (12,17) OR --daily
(DAYNAME(CURRENT DATE) = 'Saturday' AND ID = 24) OR --weekly
( ID = 25 AND 
    (
        (   TO_CHAR(DATE(CURRENT DATE)) = '01' AND 
            (DAYNAME(CURRENT DATE) NOT IN ('Saturday','Sunday'))
        )
        OR( TO_CHAR(DATE(CURRENT DATE)) IN ( '02', '03') AND 
            (DAYNAME(CURRENT DATE) = 'Monday'))
    )
) --monthly