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

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 行受影响)

*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值