SQL - 灵活地确定上周的最后一天

时间:2014-09-03 19:22:33

标签: sql sql-server date dateadd datepart

我正在尝试创建一种灵活的方法来确定上一周的最后一天,因为我知道这将在具有不同规划周的不同环境中运行(一些客户使用星期六,周日;周一太阳)。我计划创建一个变量用作每个客户的一周开始日(见下文)

    Set @BeginningWeek = 1   -- 1=Mon; 2=Tues; 3=Wed; 4=Thurs; 5=Fri; 6=Sat; 7=Sun

我一直在尝试使用dateadd和datepart的组合以及上面的变量来尝试获取本周的前一天,但是我遇到了逻辑问题。我不想使用Set DateFirst,这些脚本将在客户环境中运行,因此我不想更改其数据库中的任何内容。

假设脚本在星期三(9/3)运行;并且客户的计划周是健康的;我想设置另一个变量@EndDate =上一个星期五(8/29)。我需要灵活地使用相同的脚本(仅更改@BeginningWeek值)与另一个计划周为Mon-Sun的客户,并设置@EndDate =上一个星期日(8/31)。

1 个答案:

答案 0 :(得分:0)

这将让你在上周六。

SELECT DATEADD(day,
               -1 - (DATEPART(dw, GETDATE()) + @@DATEFIRST - 2) % 6,
               GETDATE()
       ) 

您应该能够根据实际所需日期将%6位替换为参数。