基于星期几的日期的去年等价物
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 语法。以上是关于基于星期几的日期的去年等价物的主要内容,如果未能解决你的问题,请参考以下文章