我希望根据“年”和“月”参数获取员工的工作日(不包括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);
答案 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
的位值以对此进行测试。