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

    技术2022-05-18  12

    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)

    */


    最新回复(0)