给出
DECLARE @ArchiveDate date = '5/1/2019';
我希望退回'4/1/2019'
。
给出另一个示例@ArchiveDate date ='7/1/2019'; then
'6/3 / 2019'`将被返回。
答案 0 :(得分:1)
SELECT
DATEADD(day,
CASE WHEN
DATEPART(weekday, DATEADD(MONTH, -1, @ArchiveDate)) = 1
THEN 1
WHEN DATEPART(weekday, DATEADD(MONTH, -1, @ArchiveDate)) = 7 THEN 2
ELSE 0
END
, DATEADD(MONTH, -1, @ArchiveDate))
它的作用是首先从@ArchiveDate中减去一个月,然后在周六或周日着陆时添加一个偏移量(使用DATEPART)。请注意,这不会考虑任何假期。据我所知,没有内置的假期列表,因此如果需要,您将需要一个更复杂的系统-也许是一个用户定义的函数,该函数返回给定日期所需的偏移量。