如何找出 SAP HANA 中两个日期之间的工作日数(周一至周五)?我们不必考虑假期。
我们无法使用
WORKDAYS_BETWEEN()
,因为我们没有 TFACS
桌子。
以下是如何使用 sql:
第二部分可以稍微简化一下,这样你就不用写两次减法了。
这里是开始日期“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
我更喜欢在这里创建一个用户定义的函数以在 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;
希望对您有帮助,