27,579
社区成员
发帖
与我相关
我的任务
分享
set datefirst 1
select * from
(
select DATEADD(DAY,number,'2010-01-01') as rq,
dense_rank()over(partition by MONTH(DATEADD(DAY,number,'2010-01-01')) order by DATEPART(WEEK,DATEADD(DAY,number,'2010-01-01'))) as zz
from master..spt_values
where number >=0 and type='p' and DATEADD(DAY,number,'2010-01-01')<='2011-01-31'
)t
where zz=3 and DATEPART(weekday,rq)=1
rq zz
----------------------- --------------------
2010-01-11 00:00:00.000 3
2011-01-10 00:00:00.000 3
2010-02-15 00:00:00.000 3
2010-03-15 00:00:00.000 3
2010-04-12 00:00:00.000 3
2010-05-10 00:00:00.000 3
2010-06-14 00:00:00.000 3
2010-07-12 00:00:00.000 3
2010-08-09 00:00:00.000 3
2010-09-13 00:00:00.000 3
2010-10-11 00:00:00.000 3
2010-11-15 00:00:00.000 3
2010-12-13 00:00:00.000 3
(13 row(s) affected)
declare @Year varchar(4)
set @Year='2011'
select Number [Month],dateadd(dd,-datepart(weekday,Date),dateadd(dd,16,Date)) as Date
from
(
select Number,convert(datetime,@Year+'-'+convert(varchar,Number)+'-01') Date
from master..spt_values
where type='P' and number between 1 and 12
) a
num mon date
-------------------- ----------- -----------------------
3 1 2011-01-17 00:00:00.000
3 2 2011-02-21 00:00:00.000
3 3 2011-03-21 00:00:00.000
3 4 2011-04-18 00:00:00.000
3 5 2011-05-16 00:00:00.000
3 6 2011-06-20 00:00:00.000
3 7 2011-07-18 00:00:00.000
3 8 2011-08-15 00:00:00.000
3 9 2011-09-19 00:00:00.000
3 10 2011-10-17 00:00:00.000
3 11 2011-11-21 00:00:00.000
3 12 2011-12-19 00:00:00.000
select * from
(select row_number() over(partition by datepart(month,dateadd(dd,number,'2011-01-01')) order by datepart(month,dateadd(dd,number,'2011-01-01'))) as num ,
datepart(month,dateadd(dd,number,'2011-01-01')) as mon,dateadd(dd,number,'2011-01-01') as date
from master..spt_values
where type='p' and number < datediff(dd,'2011-01-01','2012-01-01')
and DatePart(weekday,dateadd(dd,number,'2011-01-01'))=2) a where a.num=3
declare @ datetime
select @ = getdate(), @ = @ - day(@), @ = @ + 15 - (@@datefirst-1+datepart(weekday,@))%7
select @
select * from
(select dense_rank() over(partition by datepart(month,dateadd(dd,number,'2011-01-01')) order by datepart(wk,dateadd(dd,number,'2011-01-01'))) as num ,
datepart(month,dateadd(dd,number,'2011-01-01')) as mon,dateadd(dd,number,'2011-01-01') as date
from master..spt_values
where type='p' and number < datediff(dd,'2011-01-01','2012-01-01')
)a
where a.num=3 and datepart(dw,date)=2
num mon date
-------------------- ----------- -----------------------
3 1 2011-01-10 00:00:00.000
3 2 2011-02-14 00:00:00.000
3 3 2011-03-14 00:00:00.000
3 4 2011-04-11 00:00:00.000
3 5 2011-05-16 00:00:00.000
3 6 2011-06-13 00:00:00.000
3 7 2011-07-11 00:00:00.000
3 8 2011-08-15 00:00:00.000
3 9 2011-09-12 00:00:00.000
3 10 2011-10-10 00:00:00.000
3 11 2011-11-14 00:00:00.000
3 12 2011-12-12 00:00:00.000
declare @d datetime;
set @d=DATEADD (wk,datediff(wk,0,dateadd(wk,2,dateadd(DAY,1-datepart(day,getdate()),getdate()))),0)
select @d