【叶子函数分享四十八】根据年得到所有星期日的日期

go

--创建函数

create function GetWeekDays(@year int)

returns @t table (星期天varchar(20))

as

begin

insert @t

select substring(convert(varchar,dateadd(day,x,col),120),1,10) from

( select cast(cast(@year as varchar(4))+'-1-1' as datetime) as col )a cross join

( select top 365 b8.i+b7.i + b6.i + b5.i + b4.i +b3.i +b2.i + b1.i + b0.i x

from(select 0 i union all select 1) b0

cross join(select 0 i union all select 2) b1

cross join(select 0 i union all select 4) b2

cross join(select 0 i union all select 8) b3

cross join(select 0 i union all select 16) b4

cross join(select 0 i union all select 32) b5

cross join(select 0 i union all select 64) b6

cross join(select 0 i union all select 128) b7

cross join(select 0 i union all select 256) b8

order by 1 )b where datepart(dw,dateadd(day,x,col))=1

return

end

--测试示例

select * from dbo.GetWeekDays(2011)

--运行结果

/*

星期天

--------------------

2011-01-02

2011-01-09

2011-01-16

2011-01-23

2011-01-30

2011-02-06

2011-02-13

2011-02-20

2011-02-27

2011-03-06

2011-03-13

2011-03-20

2011-03-27

2011-04-03

2011-04-10

2011-04-17

2011-04-24

2011-05-01

2011-05-08

2011-05-15

2011-05-22

2011-05-29

2011-06-05

2011-06-12

2011-06-19

2011-06-26

2011-07-03

2011-07-10

2011-07-17

2011-07-24

2011-07-31

2011-08-07

2011-08-14

2011-08-21

2011-08-28

2011-09-04

2011-09-11

2011-09-18

2011-09-25

2011-10-02

2011-10-09

2011-10-16

2011-10-23

2011-10-30

2011-11-06

2011-11-13

2011-11-20

2011-11-27

2011-12-04

2011-12-11

2011-12-18

2011-12-25

(52 row(s) affected)

*/

你可能感兴趣的:(函数)