对于任何给定日期,我需要确定它是星期几。
我已经知道如何使用此DATENAME(dw,MyDate.Field)以及使用此DATEPART(dw,MyDate.Field)的当天数来获取星期几。
如果我在星期三之前得到了一周中的某一天,那么我想回到那个星期三的日期。
如果星期几是星期三或之后我想要在下周三返回日期。
星期一是我系统中的第1天。
答案 0 :(得分:1)
使用DATEPART()
确定星期几。
针对不同情况使用CASE()
。
计算日期增量。提示:它是3-dw
或7+3-dw
。
使用DATEADD()
从当天(由DATEPART
返回)到下周三或周三。
答案 1 :(得分: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