首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用T-SQL获取上周五的日期,除非今天是周五

使用T-SQL获取上周五的日期,除非今天是周五
EN

Stack Overflow用户
提问于 2012-08-11 13:25:42
回答 11查看 47.8K关注 0票数 19

我正在尝试获取正确的SQL代码以获取上周五的日期。几天前,我以为我的代码是正确的。但我只是注意到它是上周的周五日期,而不是上周五。我写这个问题的日期是2012年8月11日星期六上午12:23在SQL Server中,此代码返回2012年8月3日星期五。但是,我想让它返回到2012年8月10日星期五。我如何修复这段代码?由于我们在这里开始详细说明,如果当前日期是星期五,那么我想返回今天的日期。所以,如果是昨天(2012年8月10日),我昨天运行了这段代码,那么我希望这段代码返回2012年8月10日,而不是2012年8月3日。

代码语言:javascript
复制
SELECT DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0))
EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2012-08-11 13:53:41

试试这个:

代码语言:javascript
复制
declare @date datetime;
set @date='2012-08-09'
SELECT case when datepart(weekday, @date) >5 then
 DATEADD(DAY, +4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) 
else DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end

结果

代码语言:javascript
复制
2012-08-03 

Example2:

代码语言:javascript
复制
declare @date datetime;
set @date='2012-08-10'
SELECT case when datepart(weekday, @date) >5 then
 DATEADD(DAY, +4, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) 
else DATEADD(DAY, -3, DATEADD(WEEK, DATEDIFF(WEEK, 0, @date), 0)) end

结果

代码语言:javascript
复制
  2012-08-10 
票数 15
EN

Stack Overflow用户

发布于 2012-09-28 19:33:44

模算术是最直接的方法,运算的顺序决定了如何处理星期五:

代码语言:javascript
复制
DECLARE @test_date DATETIME = '2012-09-28'

SELECT DATEADD(d,-1-(DATEPART(dw,@test_date) % 7),@test_date) AS Last_Friday
      ,DATEADD(d,-(DATEPART(dw,@test_date+1) % 7),@test_date) AS This_Friday
票数 11
EN

Stack Overflow用户

发布于 2012-08-11 14:18:51

使用以下命令:

代码语言:javascript
复制
SELECT DATEADD(day, (DATEDIFF (day, '19800104', CURRENT_TIMESTAMP) / 7) * 7, '19800104') as Last_Friday
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11912181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档