Transact SQL-计算一年中的休假天数

时间:2018-07-18 01:45:38

标签: sql sql-server

我想计算该财政年度(2017年7月1日至2018年6月30日)员工休假的天数。

有些员工在这几天以外请假,例如,某位员工的请假申请开始日期为30/06/2017到2017/7/07,即2天,但是我会只需捕获2017年7月的1天。

我只是想成为这里的100%,所以这是我下面的查询

Select * from leave where leave_start < '2018-07-01' and leave_end > '2017-06-30'

表是

Staffno | leave_type | leave_start | leave_end  | days_taken
0001    | AnnualLeave| 30/06/2017  | 03/07/2018 |    2

很明显,一旦获得结果,我将需要计算出实际的开始日期和实际的结束日期,然后在excel中为它做一个networkdays公式。

谢谢,非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

如果开始日期和结束日期超出间隔,请使用CASE语句替换边界日期。在您的示例中,您没有将开始日期和结束日期算作休假,因此,如果您在查询中需要此日期(此处将开始日期和结束日期算作休假),只需在period_days_taken定义中添加“ -2”:< / p>

Select leave.*, 
       DATEDIFF(DAY,
               CASE WHEN leave_start<'2017-06-30' 
                    THEN '2017-06-30' 
                    ELSE leave_start END,
               CASE WHEN leave_end>'2018-07-01' 
                    THEN '2018-07-01' 
                    ELSE leave_end END) 

       AS  period_days_taken

from leave 

WHERE leave_start <= '2018-07-01' 
      AND leave_end >= '2017-06-30'

SQLFiddle demo