注册 登录
编程论坛 SQL Server论坛

[开源]一个实现日历的存储过程

purana 发布于 2007-10-01 11:02, 1767 次点击

if object_id('dbo.proc_Calendar') is not null
drop proc proc_Calendar
go
create proc proc_Calendar
@intYear varchar(4),
@intMonth varchar(2)
as
declare @date datetime
declare @wd int,@days int
declare @y int,@i int,@j int
declare @r varchar(128)
declare @k varchar(60)
declare @ds int,@n int
set @date=convert(datetime,@intYear+@intMonth+'01')
set @wd=datepart(weekday,@date)-1

if datepart(month,@date)=2
begin
set @y=datepart(year,@date)
if (@y%4=0 and @y%100<>0)or @y%400=0
set @days=29
else
set @days=29
end
else
begin
set @days=case datepart(month,@date)
when 4 then 30
when 6 then 30
when 9 then 30
when 11 then 30
else 31 end
end
set @i=0
set @r=''
while @i<@wd
begin
set @r=@r+' '
set @i=@i+1
end
set @i=1
while @i<@days
begin
if @i<=9
set @r=@r+'0'+cast(@i as varchar(2))
else
set @r=@r+cast(@i as varchar(2))
set @i=@i+1
end
set @ds=@days/7
if @days%7<>0
set @ds=@ds+1

set @i=1
set @n=1

print cast(@intYear as varchar(4))+'年 '+cast(@intMonth as varchar(2))+'月'
print 'Sun Mon Tus Wed Thu Fri Sat'
while @i<=@ds
begin
set @k=''
set @j=1
while @j<=7
begin
set @k=@k+substring(@r,@n,2)+' '
set @n=@n+2
set @j=@j+1
end
print rtrim(@k)
set @i=@i+1
end
go

--调用
exec dbo.proc_Calendar '2007','02'



显示为:

2007年 02月
Sun Mon Tus Wed Thu Fri Sat
01 02 03
04 05 06 07 08 09 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28
20 回复
#2
缘吇弹2007-10-01 12:43
好的.
#3
purana2007-10-01 20:19
晕菜,
没人顶?
#4
卡卡艾2007-10-01 21:25
我来顶一个.呵呵.
放假都不休息啊..
#5
大年初四2007-10-01 21:55
厉害
#6
bygg2007-10-02 03:10
厉害,呵,学习学习啊
#7
卡卡艾2007-10-02 21:49
purana阿姨在数据库这方面造诣很深嘛.
嘎嘎.
.
学习学习...
#8
purana2007-10-02 22:22
晕..免阿姨..
数据库我才刚学.
什么也不懂..
#9
缘吇弹2007-10-02 22:50
以下是引用卡卡艾在2007-10-2 21:49:25的发言:
purana阿姨在数据库这方面造诣很深嘛.
嘎嘎.
.
学习学习...

哈哈哈哈
当作没看到好了.

#10
缘吇弹2007-10-02 22:51
以下是引用purana在2007-10-2 22:22:09的发言:
晕..免阿姨..
数据库我才刚学.
什么也不懂..

谁叫你乱填资料

#11
purana2007-10-02 22:52
BS..
来破坏我的帖子..
#12
缘吇弹2007-10-02 22:56
我咋破坏了?
#13
purana2007-10-02 22:58
我好不容易才发一帖..就被你破坏了.
#14
缘吇弹2007-10-02 22:59
我咋破坏了?
#15
缘吇弹2007-10-02 23:00
我这是在给你增加人气
#16
purana2007-10-02 23:01
BS
破坏我的帖..
#17
缘吇弹2007-10-02 23:02
啊````我懂啦.
不是说我!!!!!
#18
卡卡艾2007-10-03 08:49

那叫姐姐好了.
每次看到都是你回的帖.
刚学就学这么强.那你怎么学的啊?教教我.呵呵.

#19
purana2007-10-03 09:22
不强.不强..菜菜一只..
#20
卡卡艾2007-10-03 14:30
真谦虚.
#21
缘吇弹2007-10-03 17:16
小菜一碟,不过很好吃
1