给定一个日期,我想返回一个在第一个工作日之前一个月的日期

时间:2019-08-06 19:20:29

标签: sql sql-server

给出

DECLARE @ArchiveDate date = '5/1/2019';

我希望退回'4/1/2019'

给出另一个示例@ArchiveDate date ='7/1/2019'; then'6/3 / 2019'`将被返回。

1 个答案:

答案 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)。请注意,这不会考虑任何假期。据我所知,没有内置的假期列表,因此如果需要,您将需要一个更复杂的系统-也许是一个用户定义的函数,该函数返回给定日期所需的偏移量。

相关问题