如何找出SAP HANA中两个日期之间的工作日数(周一至周五)?我们不必考虑假期。 我们不能使用WORKDAYS_BETWEEN(),因为我们没有TFACS表。
答案 0 :(得分:0)
以下是你在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
答案 1 :(得分: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教程Calculate the Count of Working Days Between Two Dates,其中我创建了一个类似的SQL函数,用于检查自定义工作日历或假日日历。
以下是将该函数称为样本
的方法select CalculateWorkDays('20170101', '20170131') as i from dummy;
我希望它有所帮助,