现在的位置: 首页 > 综合 > 正文

显示每月的日期属于该月的第几周

2013年05月27日 ⁄ 综合 ⁄ 共 1752字 ⁄ 字号 评论关闭

if object_id('fn_getwk') is not null

    drop function fn_getwk

go

create function fn_getwk(

    @year int,--输入显示的年份

    @month int, --输入显示的月份

    @type bit=0 --指定每周的第一天,默认为星期日(中国习惯),如果参数为就是星期一为每周的第一天

) returns @t table(

    周数 nvarchar(10),

    开始日期 varchar(10),

    结束日期 varchar(10)

) as

begin

declare @d datetime

set @d=dateadd(wk,datediff(wk,'1900',cast(ltrim(@year*10000+@month*100+1) as datetime)),'1900')+@type

;with t as

(

    select top (datediff(dd,ltrim(@year*10000+@month*100+1),ltrim(@year*10000+(@month+1)*100+1)))

        [date]=cast(ltrim(@year*10000+@month*100+1) as datetime)-1

            +row_number()over(order by getdate())

    from sysobjects

)

insert @t

    select

        case

            when [date] < @d+6 then '第一周'

            when [date] < @d+13 then '第二周'

            when [date] < @d+20 then '第三周'

            when [date] < @d+27 then '第四周'

            when [date] < @d+34 then '第五周'

            else '第六周'

        end AS 周数,

        convert(varchar,min([date]),23) 开始日期,

        convert(varchar,max([date]),23) 结束日期

    from t

    group by

        case

            when [date] < @d+6 then '第一周'

            when [date] < @d+13 then '第二周'

            when [date] < @d+20 then '第三周'

            when [date] < @d+27 then '第四周'

            when [date] < @d+34 then '第五周'

            else '第六周'

        end

    order by 2

    return

end

GO

select * from fn_getwk(2010,5,0)

select * from fn_getwk(2010,5,0)

/*

周数        开始日期      结束日期

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

第一周       2010-05-01 2010-05-01

第二周       2010-05-02 2010-05-08

第三周       2010-05-09 2010-05-15

第四周       2010-05-16 2010-05-22

第五周       2010-05-23 2010-05-29

第六周       2010-05-30 2010-05-31

(6 行受影响)

*/

select * from fn_getwk(2010,5,1)

/*

周数        开始日期      结束日期

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

第一周       2010-05-01 2010-05-02

第二周       2010-05-03 2010-05-09

第三周       2010-05-10 2010-05-16

第四周       2010-05-17 2010-05-23

第五周       2010-05-24 2010-05-30

第六周       2010-05-31 2010-05-31

(6 行受影响)

*/

抱歉!评论已关闭.