需要获得员工的工作日

时间:2018-03-07 03:58:40

标签: sql sql-server reporting-services ssrs-2012

我希望根据“年”和“月”参数获取员工的工作日(不包括sat和sun)。如果我选择年份参数,那么它应该是从2018/01/01到今天的日期,他工作了多少天。如果我选择月份参数,那么本月3月会有多少个工作日。

以下是我对年度参数的查询

$minutes = 60 * 24 * 365 * 10; // ten years should be long enough
Cookie::queue(Cookie::make('uuid', Str::uuid(), $minutes));

Cookie::queue('uuid', Str::uuid(), $minutes);

2 个答案:

答案 0 :(得分:0)

据我所知,如果选择月份,我们需要计算当月的工作日数,如果相应地选择年份,则需要计算当前年份。对于此要求,您可以按照以下代码进行操作:

IF(ISNULL(@Month,0)=0 AND ISNULL(@Year,0)!=0)
BEGIN
   SELECT COUNT(Date_Col)
   FROM Table_Name
   WHERE YEAR(Date_Col)=@Year AND Date_Col <= GETDATE() AND DATEPART(WEEKDAY,Date_Col) != 1 AND DATEPART(WEEKDAY,Date_Col) != 7
END

IF(ISNULL(@Year,0)=0 AND ISNULL(@Month)!=0)
BEGIN
   SELECT COUNT(Date_Col)
   FROM Table_Name
   WHERE Date_Col BETWEEN DATEADD(DAY,-GETADATE()+1,GETDATE()) AND GETDATEE() AND DATEPART(WEEKDAY,Date_Col) != 1 AND DATEPART(WEEKDAY,Date_Col) != 7

希望你找到了你的要求。

如果我有任何错误,请告诉我。

答案 1 :(得分:0)

我们可以使用CTE解决此问题 -

declare @YEAR bit = 0
declare @MONTH bit = 1
declare @StartDT datetime = (case when isnull(@YEAR,0) <> 0 then '2018-01-01' else dateadd(month, datediff(month, 0, getdate()), 0) end)

;with cte as
(
    select @StartDT as StartDT, DATEPART(WEEKDAY, @StartDT) as [WeekDay]
    union all
    select DATEADD(DD, 1, StartDT),DATEPART(WEEKDAY,DATEADD(DD, 1, StartDT))
    from cte
    where StartDT < getdate()-1
)
select count(distinct StartDT)
from cte
where [WeekDay] not in (1,7)

更改@YEAR@MONTH的位值以对此进行测试。