基于星期几的日期的去年等价物

Posted

技术标签:

【中文标题】基于星期几的日期的去年等价物【英文标题】:Last year's equivalent for a date based on day of week 【发布时间】:2016-01-06 10:48:09 【问题描述】:

然后我如何获得两者去年的等价物:

去年的前几周星期一 去年的前几周星期日日期

基于我得到的价值:

--今年上周开始

SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0)  

--今年上周结束

SELECT DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 6) 

因此,根据今天的日期(2016 年 6 月 1 日),我得到了今年的以下信息:

今年前一个星期一的日期 = 28/12/2015

今年之前的周日日期 = 03/01/2016

我想实现:

去年的前一个星期一日期 = 29/12/2014 去年的上周日日期 = 04/01/2015

语法将每 4 年处理一次闰年问题。

谢谢

【问题讨论】:

你能再举几个例子,特别注意边界,例如对我来说,您的第一个代码似乎在周六和周日之间转换-如果您在今天的日期是 2016-01-03 时询问“上周”,它会返回 2015-12-28 - 2016-01-03,即包括当前星期日的范围。对吗? 您是否要求去年前一周的开始和结束日期与今年当前周的数字相同?如果是这样,这样的事情可能会奏效吗? SET DATEFIRST 2 SELECT DATEADD(WEEK,DATEPART(Wk,DATEADD(wk, DATEDIFF(wk, 6, GETDATE()), 0))-1,DATEADD(YEAR,-1,GETDATE())) AS PreviousMonday 【参考方案1】:
SELECT DATEADD(wk, DATEDIFF(wk, 6, dateadd(year,-1,GETDATE())), 0)  as 'Previous monday date last year '


SELECT DATEADD(wk, DATEDIFF(wk, 6, dateadd(year,-1,GETDATE())), 6)  as 'Previous Sundays date last year '

【讨论】:

谢谢。它似乎仍然没有解决闰年问题。我将 getdate() 更改为 DECLARE @testdate datetime; SET @testdate='20160229,我现在得到去年的上一个星期一日期='2015-02-16'和去年的上一个星期日日期='2015-02-22',但我认为这将是'2015-03 -02' 和 '2015-03-08' 分别。更改@testdate='20160222' 得到与'20160229' 相同的答案,这对于testdate '20160222' 是正确的,但对于'20160229' 是错误的。更改 @testdate=20160307 会得到“2015-02-23”和“2015-03-01”,但我认为应该得到“2015-03-09”和“2015-03-15”。 我把它改成了下面的,它似乎工作了——上周开始 SELECT cast(DATEADD(wk, DATEDIFF(wk, 6, dateadd(week,-52,@testdate)), 0) as date) --end of last week SELECT cast(DATEADD(wk, DATEDIFF(wk, 6, dateadd(week,-52,@testdate)), 6) as date) @beatrice1711 - 我对你的“输入是 20160307,输出是 '2015-03-09' and '2015-03-15'”感到特别惊讶 - 因为这些似乎是去年的“未来日期”。这就是为什么我要求您加强您的问题并添加一些工作示例,以便我们可以清楚地了解您的要求。闰日可能会出现问题,但您可能想通过多种方式处理它们,以至于仅仅说“解决闰年问题”并不能真正给我们足够的指导。 你能详细说明你的问题吗@beatrice1711 你只面临闰年的问题吗?【参考方案2】:
SELECT DATEADD(wk, DATEDIFF(wk, 6, dateadd(year,-1,GETDATE())), 0)  as 'Previous monday date '


SELECT DATEADD(wk, DATEDIFF(wk, 6, dateadd(year,-1,GETDATE())), 6)  as 'Previous Sundays date '

太简单了

【讨论】:

如果我们将它与@G.Nagababu 的查询相比较,您的查询有什么好处。两个查询都有相同的 SQL 语法。

以上是关于基于星期几的日期的去年等价物的主要内容,如果未能解决你的问题,请参考以下文章

Python写一个根据日期计算是星期几的模块

python Python获取指定星期几的日期

在java中获取日期的星期几的一个字母缩写

JS计算系统当前日期是星期几的几种方法

java实现两个日期内具有几个星期几的计算

计算星期几的函数