当前位置: 首页 > 面试题库 >

在SQL Server中获得工作日

张晨朗
2023-03-14
问题内容

我之前已经发布了这个问题,但我想我还不能像我应该的那样清楚。我想计算2个日期之间的差异,例如2018/01/012018/01/31

我有一张桌子Calendar,上面存储着什么日子是假期,什么不是假期。我将星期日和星期六标记为放假,并希望计算剩余的工作日应为23。

但是实际的问题是我也可以将星期日标记为假日,而不是星期六。

这就是为什么我也要使用此表的原因。我看到很多解决方案给我23个结果,因为他们将星期日和星期六标记为假期,这也很好,但是我希望它也使用此表。

我做了很多尝试,但是我确定我要去哪里错了。也许现在有人可以提供帮助。

桌子是这样的

CREATE TABLE Calendar
(
    Day Varchar(25), --name of the day i.e Sunday, Saturday
    IsOffDay Binary  --1 for Yes and 0 for False
)

因此,如果我将周六和周日标记为假日,则结果应为23天,但是如果我仅将周日标记为假日并使周六不活动,则结果应为27天

一位同事说可能重复的建议解决方案是将周六和周日作为假期,但是我不希望将其硬编码或随便你说。


问题答案:

尝试使用此查询。

您的表:

 CREATE TABLE #Calendar
    ([Day] Varchar(25), --name of the day i.e Sunday, Saturday
     IsOffDay BIT  --1 for Yes and 0 for False
     )

    INSERT INTO #Calendar ([Day],IsOffDay)
    SELECT 'Sunday',1  union
    SELECT 'Saturday',0

询问

DECLARE @STARTDATE  DATE='2018-01-01',@ENDDATE  DATE='2018-01-31'

;WITH CTE AS (
SELECT @STARTDATE  AS STARTDATE
UNION ALL
select DATEADD(D,1,STARTDATE) 
FROM CTE
WHERE STARTDATE <@ENDDATE
)
,WORKINGDAYS AS (
SELECT STARTDATE,DATENAME(DW,STARTDATE)WEEKDAYS,C1.Day AS isweekend
FROM CTE c
left JOIN #Calendar C1 ON DATENAME(DW,STARTDATE)=C1.Day AND C1.IsOffDay=1
)

SELECT COUNT(WEEKDAYS)as WORKINGDAYS FROM WORKINGDAYS WHERE isweekend is null

注意: 上面的查询为您提供Working Days =27。如果您想将星期六作为假期更新日历表,IsOffDay=1 where [Day]='Saturday'则可以为您提供Working Days =23



 类似资料:
  • 问题内容: 我使用 hudson.cli.CLI jar* 创建Jenkins职位。我在 “构建后步骤” 部分中选择了 “归档工件” 选项。它将每个成功构建的工件存档。我正在使用 jenkins远程访问api 获取有关 作业的 详细信息。并获取有关 构建的 详细信息。 *** 在删除构建时,不会删除相应的归档工件。我想确保将其删除。 当我使用jenkins远程访问api 进行构建时,它会返回jso

  • 我的代码只有在我删除限制函数时才有效,我做错了什么? 错误为: TypeError:批量。查找(…)。limit不是D:\nodeprojects\mysite\server上的函数。js:281:19 at对象。(D:\nodeprojects\mysite\server.js:285:3)位于模块_在对象处编译(module.js:570:32)。模块_扩展。。模块处的js(模块js:579:

  • 我想把一周中的几天放到屏幕上的周历里。基本上是获取一周中的天数并将其放入文本视图中,例如,今天是25号,然后取这个“25”并将其放入文本视图中,如此类推,但我没有成功。我试着这样: [在此输入图片描述][1] 当我运行应用程序时,它看起来像这样,有人能帮我吗?[1]: https://i.stack.imgur.com/jw89K.jpg

  • 我正在尝试在android Studio中安装flutter sdk……每次我在android Studio中安装flutter sdk时,它都会再次向我显示相同的错误“Flutter sdk未在指定位置找到”这就是我每次得到的

  • 问题内容: 如果我在下面的代码中将type设置为’GET’,则可以使用,但无法将其与’POST’一起使用。 ajaxPostTest.html … ajaxPostTest_server.php … 浏览器上的预期输出为… 我实际上是在尝试与ASP.NET Web服务器进行交互,并且我想先确认我的ajax是否可以正常工作(并且我对ajax的理解正确),因此可以简化此代码。 Firebug调试… 我

  • 我只有java版本1.8.0_45()。所以,你建议的解决方案不能解决我的问题。 当我运行应用程序时,它会抛出以下错误: 意外的顶级异常:错误:com.android.dx.cf.iface。ParseException:com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)处的坏类文件magic(cafe