【叶子函数分享二十四】根据年月生成日历函数

go --创建函数(第一版)(作者:dobear_0922) create function fn_Calendar(@year int, @month int) returns nvarchar(max) as begin declare @result nvarchar(max), @Enter nvarchar(8) select @Enter = char(13)+char(10), @result = ' Sun Mon Tue Wed Thu Fri Sat' + @Enter --表头 declare @start datetime, @end datetime select @start = rtrim(@year)+'-'+rtrim(@month)+'-1', @end = dateadd(mm, 1, @start) set @result = @result+replicate(' ', (datepart(dw, @start)+@@datefirst+6)%7) --第一行前面的空格 while datediff(d, @start, @end)>0 begin if (datepart(dw, @start)+@@datefirst)%7 = 1 select @result = @result+@Enter --是否换行 select @result = @result+right(' '+rtrim(day(@start)), 4), @start = dateadd(d, 1, @start) end return @result end go --测试示例 set datefirst 3 print dbo.fn_Calendar(2007, 12) select dbo.fn_Calendar(2007, 12) set datefirst 7 --运行结果 /* Sun Mon Tue Wed Thu Fri Sat 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 */ go --创建函数(第二版)(作者:libin_ftsafe) create function f_calendar(@year int,@month int) returns @t table(日varchar(4),一varchar(4),二varchar(4),三varchar(4),四varchar(4),五varchar(4),六varchar(4)) as begin declare @a table(id int identity(0,1),date datetime) insert into @a(date) select top 31 rtrim(@year)+'-'+rtrim(@month)+'-1' from sysobjects update @a set date=dateadd(dd,id,date) insert into @t select max(case datepart(dw,date) when 7 then rtrim(day(date)) else '' end), max(case datepart(dw,date) when 1 then rtrim(day(date)) else '' end), max(case datepart(dw,date) when 2 then rtrim(day(date)) else '' end), max(case datepart(dw,date) when 3 then rtrim(day(date)) else '' end), max(case datepart(dw,date) when 4 then rtrim(day(date)) else '' end), max(case datepart(dw,date) when 5 then rtrim(day(date)) else '' end), max(case datepart(dw,date) when 6 then rtrim(day(date)) else '' end) from @a where month(date)=@month group by (case datepart(dw,date) when 7 then datepart(week,date)+1 else datepart(week,date) end) return end go --测试示例 set datefirst 1 select * from dbo.f_calendar(2007,12) --运行结果 /* 日 一 二 三 四 五 六 ---- ---- ---- ---- ---- ---- ---- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 */ 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/maco_wang/archive/2011/03/20/6262162.aspx
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值