我有这个表,我指定假日在一周。我想计算总工作日之间的两个特定日期使用这些字段。
CREATE TABLE [tbl_Shift](
[OffDay1] [nvarchar](25) NOT NULL CONSTRAINT [DF_tbl_Shift_OffDay1] DEFAULT (N'Sunday'),
[IsAlternateOffDay2] [bit] NULL,
[OffDay2] [nvarchar](25) NULL
)
INSERT INTO [tbl_Shift] VALUES ('Sunday', 'True', 'Saturday')
我写了这个查询,但我不能得到正确的日子。它应该给予23天,因为有2个假期,每周和31天,但我得到26天。
DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME
SET @StartDate = '2018/05/01'
SET @EndDate = '2018/05/31'
SELECT
(DATEDIFF(dd, @StartDate, @EndDate+1)) -(DATEDIFF(wk, @StartDate, @EndDate))
-(CASE WHEN IsAlternateOffday2 = 1 THEN 1 END) FROM HRM.tbl_Shift
5条答案
按热度按时间mdfafbf11#
这将给予23:
vfhzx4xs2#
这样每个周末就减去了2天。检查一下你的服务器配置,看看星期天是一周的第一天还是最后一天。这可能会把事情推迟到一个周末。
更新:
使用COALESCE将NULLS替换为替代值。
aemubtdh3#
试试这个
结果
演示:http://rextester.com/TOLYT35075
soat7uwm4#
这是我在查看答案后创建的。我需要几个月的每月天数。下面将提供该信息,并将其插入到
#MonthDayCount
表中。注意:我将字段命名为Month
,尽管这是SQL Server定义的术语;如果需要,可以更改它。您必须输入该月的第一天和最后一天,以便正确计算第一个月和最后一个月。如果您输入
1/2/2022
,则会导致一月少一天。wmomyfyw5#
MS SQL Server查询以查找当前月份中所有工作日(非星期六和星期日)的计数。在SQL Server、Azure Synapse Analytics中工作
注意:根据需要更改getdate()。