Sql server 根据一周中的哪一天确定日期

Sql server 根据一周中的哪一天确定日期,sql-server,Sql Server,对于任何给定的日期,我都需要确定它是一周中的哪一天 我已经知道了如何使用DATENAMEdw,MyDate.Field获取一周中的某一天,以及使用DATEPARTdw,MyDate.Field获取一天中的数字 一旦我得到了一周中的某一天,如果是在星期三之前,我想返回该星期三的日期 如果一周中的某一天是周三或之后,那么我想在下周三返回 在我的系统中,星期一是第一天 使用DATEPART确定一周中的哪一天 不同案例的用例 计算日增量。提示:它不是3-dw就是7+3-dw 使用DATEADD可从DAT

对于任何给定的日期,我都需要确定它是一周中的哪一天

我已经知道了如何使用DATENAMEdw,MyDate.Field获取一周中的某一天,以及使用DATEPARTdw,MyDate.Field获取一天中的数字

一旦我得到了一周中的某一天,如果是在星期三之前,我想返回该星期三的日期

如果一周中的某一天是周三或之后,那么我想在下周三返回

在我的系统中,星期一是第一天

使用DATEPART确定一周中的哪一天

不同案例的用例

计算日增量。提示:它不是3-dw就是7+3-dw

使用DATEADD可从DATEPART返回的当天获取到下周的星期三或星期三。

使用DATEPART确定一周中的哪一天

不同案例的用例

计算日增量。提示:它不是3-dw就是7+3-dw


使用DATEADD可从DATEPART返回的当天获取到下周的星期三或星期三。

最简单的方法,无需任何计算:

set datefirst 1;
with dates as (
 select CAST('20170906' as datetime) d
 union all
 select DATEADD(day, 1, dates.d) 
 from dates
 where DATEADD(day, 1, dates.d) <= '20170930'
)
select dates.d, DATEADD(day, v.valueToAdd, dates.d) nextWed
from dates
    join (values(1,2),(2,1),(3,7),(4,6),(5,5),(6,4),(7,3))v(dayOfWeek,valueToAdd) on v.dayOfWeek = DATEPART(weekday, dates.d)
order by 1

最简单的方法,无需任何计算:

set datefirst 1;
with dates as (
 select CAST('20170906' as datetime) d
 union all
 select DATEADD(day, 1, dates.d) 
 from dates
 where DATEADD(day, 1, dates.d) <= '20170930'
)
select dates.d, DATEADD(day, v.valueToAdd, dates.d) nextWed
from dates
    join (values(1,2),(2,1),(3,7),(4,6),(5,5),(6,4),(7,3))v(dayOfWeek,valueToAdd) on v.dayOfWeek = DATEPART(weekday, dates.d)
order by 1

可能重复的@TabAlleman它不是重复的@TabAlleman它不是重复的这更多的是评论而不是答案。提供一个有效的例子可以让这成为一个答案。不,我没有为他做100%的工作。如果他不能从这里弄明白,他应该学习非常基本的代数和SQL。网站文档说明:任何能让询问者朝着正确方向前进的答案都是有帮助的。永远不要建议你为他们做一切。但就目前而言,这并不是一个答案,而是一个朝着正确方向准确推进的评论。我认为他所缺少的只是一个案例。谢谢@neuhaus的评论,我现在得到了!这与其说是回答,不如说是评论。提供一个有效的例子可以让这成为一个答案。不,我没有为他做100%的工作。如果他不能从这里弄明白,他应该学习非常基本的代数和SQL。网站文档说明:任何能让询问者朝着正确方向前进的答案都是有帮助的。永远不要建议你为他们做一切。但就目前而言,这并不是一个答案,而是一个朝着正确方向准确推进的评论。我认为他所缺少的只是一个案例。谢谢@neuhaus的评论,我现在得到了!