/*-----------------------------------------------*/
/* 输入年份即可求日历 */
/*-----------------------------------------------*/
declare @year as varchar(10)
set @year='2009'
/*-----------------------------------------------*/
/* 基本参数 */
/*-----------------------------------------------*/
declare @date as smalldatetime --该年的开始日期
declare @enter as varchar(20) --换行
declare @tab as varchar(20) --退格
declare @weekDayStr as varchar(3000) --星期几
declare @outPrint as varchar(5000) --所有字符串的集合
set @date=cast(@year+'-1-1' as smalldatetime)
set @enter=char(13)
set @tab=char(9)
set @weekDayStr='星期日'+@tab+'星期一'+@tab+'星期二'+@tab+'星期三'+@tab+'星期四'+@tab+'星期五'+@tab+'星期六'
set @outPrint='' --null
/*-----------------------------------------------*/
/* 形成每月的日历 */
/*-----------------------------------------------*/
while(datename(mm,@date)<=12 and datename(mm,@date)>=1 and datename(yy,@date)=@year)
begin
--显示标题
set @outPrint=@outPrint+@enter+
'======================================================='+@enter+
' '+datename(yy,@date)+'年'+datename(mm,@date)+'月'+@enter+
'======================================================='+@enter
set @outPrint=@outPrint+@weekDayStr+@enter
--显示每月前的空格
set @outPrint=@outPrint+(case datename(dw,@date)
when '星期一' then @tab
when '星期二' then @tab+@tab
when '星期三' then @tab+@tab+@tab
when '星期四' then @tab+@tab+@tab+@tab
when '星期五' then @tab+@tab+@tab+@tab+@tab
when '星期六' then @tab+@tab+@tab+@tab+@tab+@tab
else ''
end)
--上个月的月份
declare @tempMonth as int
set @tempMonth=datename(mm,@date)
--显示该月日历
while(datename(mm,@date)=@tempMonth)
begin
if datename(dw,@date)='星期六'
set @outPrint=@outPrint+datename(dd,@date)+@enter
else
set @outPrint=@outPrint+datename(dd,@date)+@tab
--日期加1
set @date=dateAdd(dd,1,@date)
end
set @outPrint=@outPrint+@enter
end
/*-----------------------------------------------*/
/* 显示结果 */
/*-----------------------------------------------*/
print @outPrint
闲来无事,找到以前做过的一个日历,放到上面,希望对大家有所帮助,同时也加深自己的记忆。