【问题标题】:How to get 1st Business day in DB2如何在 DB2 中获得第一个工作日
【发布时间】:2017-09-06 16:22:30
【问题描述】:

我有以下要求,例如,以下查询应在 3 个条件下运行, 每天、每周和每月。

每天的行应该每天提供输出, 每周应该只在星期六给出输出。 Monthly 应该在第 1 个工作日输出,但如果第 1 天是星期六,则输出将在第 3 天输出,如果第 1 天是星期日,则输出应在第 2 天输出。

select * from Tablename 给了我 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

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

【问题讨论】:

    标签: sql db2


    【解决方案1】:

    我注意到的第一件事是在 Weekly 行的末尾缺少 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
    

    【讨论】:

    • 谢谢...它按预期工作.. ps:是的,这只是错字:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多