我对SQL很陌生,在Select中使用以下行可以获得十月的第一个和最后一个星期一(@selYear
定义年份)。
这里有人能告诉我如何调整它,使其在10月的第二个、第三个和第四个星期一返回吗?+请给我一个解释,以便我可以在其他日期进一步修改它?
我是否只需要将第一个公式中的最后一个0更改为7、14或21,就可以添加额外的周数?如果我想要星期五或星期四而不是星期一,我会用4或3代替6吗?
--1st Monday in October
DATEADD(d, DATEDIFF(d, 0, DATEADD(m, 10-1, DATEADD(yy, DATEDIFF(yy, 0, @selYear), 6)))/7*7, 0),
--last Monday in October
DATEADD(d, DATEDIFF(d, 0, DATEADD(m, 10, DATEADD(yy, DATEDIFF(yy, 0, @selYear), 6)))/7*7, -7),
编辑:@selYear在我的情况下被定义为@selYear nvarchar(4)
,而我插入的表列格式为datetime-也许这是错误的,因为结果应该始终是有效的日期?
非常感谢,迈克。
declare @date as date = '20141001' -- this is for october 2014
declare @n as int = 0
while (@n<7)
begin
if ((select DATENAME(dw,@date)) = 'Monday') -- write which day you want as pivot
break
else
begin
set @n = @n+1
set @date = DATEADD(D,1,@date)
end
end
select @date first
, DATEADD(D,7,@date) second
, DATEADD(D,14,@date) third
, DATEADD(D,21,@date) fourth