自1986年以来,我正在尝试找到每个月的第一个和最后一个工作日。使用以下方式,我可以找到任何给定月份的第一天,但仅限于该月,并且不考虑是否为工作日。为了简化起见,目前工作日仅指平日,并不考虑公共假期。
SELECT DATEADD(s,0,DATEADD(mm, DATEDIFF(m,0,getdate()),0))
但是我无法得到正确的工作日,所以我创建了一个包含所有工作日的日历表,并想着可以从每个月中提取最小日期,但目前我卡住了。
Date
---------------
1986-01-01
1986-01-02
1986-01-03
1986-01-06
...and so on
我曾尝试获取每个月的第一天,但这并没有考虑到这一天是否为周末。它只是简单地给出了每个月的第一天。
declare @DatFirst date = '20000101', @DatLast date = getdate();
declare @DatFirstOfFirstMonth date = dateadd(day,1-day(@DatFirst),@DatFirst);
select DatFirstOfMonth = dateadd(month,n,@DatFirstOfFirstMonth)
from (select top (datediff(month,@DatFirstOfFirstMonth,@DatLast)+1)
n=row_number() over (order by (select 1))-1
from (values (1),(1),(1),(1),(1),(1),(1),(1)) a (n)
cross join (values (1),(1),(1),(1),(1),(1),(1),(1)) b (n)
cross join (values (1),(1),(1),(1),(1),(1),(1),(1)) c (n)
cross join (values (1),(1),(1),(1),(1),(1),(1),(1)) d (n)
) x
我想知道有谁能够为我提供一些关于如何最好地解决这个问题的见解。