如何找出HANA中两个日期之间的工作日数?

问题描述 投票:0回答:2

如何找出 SAP HANA 中两个日期之间的工作日数(周一至周五)?我们不必考虑假期。

我们无法使用

WORKDAYS_BETWEEN()
,因为我们没有
TFACS
桌子。

date hana
2个回答
0
投票

以下是如何使用 sql:

  1. 计算整周数,乘以 5
  2. 添加剩余天数:从工作日结束日期中减去工作日开始日期,纠正周末(至少...),纠正结转(+5)

第二部分可以稍微简化一下,这样你就不用写两次减法了。

这里是开始日期“2015-12-04”和结束日期“2015-12-19”的示例:

SELECT ROUND( DAYS_BETWEEN (TO_DATE ('2015-12-04', 'YYYY-MM-DD'), TO_DATE('2015-12-19', 'YYYY-MM-DD')) / 7, 0, ROUND_DOWN) * 5
                       + ( case
                             when WEEKDAY (TO_DATE('2015-12-19', 'YYYY-MM-DD') ) - WEEKDAY (TO_DATE('2015-12-04', 'YYYY-MM-DD')) >= 0
                               then least( WEEKDAY (TO_DATE('2015-12-19', 'YYYY-MM-DD')), 5) - least( WEEKDAY (TO_DATE('2015-12-04', 'YYYY-MM-DD')), 5)
                             else
                                   least( WEEKDAY (TO_DATE('2015-12-19', 'YYYY-MM-DD')), 5) - least( WEEKDAY (TO_DATE('2015-12-04', 'YYYY-MM-DD')), 5) + 5
                          end )

           "Workdays" FROM DUMMY;

--> 11


0
投票

我更喜欢在这里创建一个用户定义的函数以在 HANA SQLScript 代码中使用,如下所示

Create Function CalculateWorkDays (startdate date, enddate date)
returns cnt integer
LANGUAGE SQLSCRIPT AS
begin
    declare i int;
    cnt := 0;
    i := 0;
    while :i <= days_between(:startdate, :enddate)
    do
        if WEEKDAY( ADD_DAYS(:startdate,:i) ) < 5
        then
            cnt := :cnt + 1;
        end if;
        i := :i + 1;
    end while;
end;

请注意,上面的代码块似乎包含不必要的循环。 另一方面,如果您有其他表,例如部门假期或个人假期等。在 WHILE 循环中检查这些表可能会很有用。请参阅以下 SQL 教程计算两个日期之间的工作日数,其中我创建了一个类似的 SQL 函数来检查自定义工作日历或假日日历。

以下是如何调用该函数作为示例

select CalculateWorkDays('20170101', '20170131') as i from dummy;

希望对您有帮助,

© www.soinside.com 2019 - 2024. All rights reserved.