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

Posted

技术标签:

【中文标题】SQL - 灵活地确定前一周的最后一天【英文标题】:SQL - Determine last day of previous week with flexibility 【发布时间】:2014-10-28 09:59:23 【问题描述】:

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

    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 值)并设置 @EndDate = 上周日 (8/31)。

【问题讨论】:

你用的是什么关系型数据库? Microsoft SQL Server 【参考方案1】:

这将为您提供上一个星期六。

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

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

【讨论】:

以上是关于SQL - 灵活地确定前一周的最后一天的主要内容,如果未能解决你的问题,请参考以下文章

java 获取某一月的所有周的日期段(周一到周日)

如何在Oracle中生成一周的第一天,一周的最后一天和两个日期之间的周数

在objective-c中获取一周的第一天和最后一天

从 Aginity 工作台中的周数和年份获取一周的最后一天

asp.net后台获得本月第一天和最后一天

C#如何获取指定周的日期范围