用SQL打印出每年2月日历

来源:互联网 发布:libtorrent java 编辑:程序博客网 时间:2024/05/16 05:37

/*
   Author:James
   cDate :2014-02-12
   Desc  :平润年2月计算方法

  Remark:这是本人业余时间写的一段SQL代码,如有思维漏洞请各位指教!
*/
--平年闰年计算规则:
--闰年:公元年数可被4整除为闰年,但是正百的年数必须是可以被400整除的才是闰年
--平年:其他都是平年
--select datepart(dw,'2011-02-01')

--select 2002%4
--2000~2099
declare @date smalldatetime ='1900-02-01'
if(isdate(@date)=0) begin 
  print '输入的日期有误,请核对后重新输入!' 
end
else begin 
     --判断是闰年或平年
     if(year(@date)%4=0)  begin
          if(right(year(@date),1)= 0 and left(right(year(@date),2),1) = 0) begin 
             if(year(@date)%400 = 0) begin
               print '闰年:'+convert(varchar(4),year(@date))+'年'
               print '2 月:29天'+char(13)+char(10)+'闰年:'+convert(varchar(4),year(@date))+'年'+'2月'
               print '--------------------------------------------'              
               print ' 日 一 二 三 四 五 六'
               print '--------------------------------------------'
               --循环输出二月天数
               declare @num int =1,@numstr  varchar(50) = ''
               set @date =convert(date,(convert(varchar(4),year(@date))+'-02-01'))
               while(@num <=29) begin
                   set @date = dateadd(dd,@num-1,@date)
                   --控制空格数量
                   if(@num<10) begin
                     set @numstr +=space(2)+convert(varchar(20),@num)
                   end
                   else begin
                     set @numstr +=space(1)+convert(varchar(20),@num)
                   end                
       --控制打印
       if(datepart(dw,convert(date,@date,120)) =7) begin
          if(@num = 5) begin
           set @numstr = space(5)+@numstr   --如果是打印第一行则在变量前追加5个空格
          end         
           print @numstr      --打印输出
           set @numstr = ''       
       end
       --打印输出
       if(@num =29) begin print @numstr end
                  
                   set @num +=1   --累加
                   set @date =convert(date,(convert(varchar(4),year(@date))+'-02-01')) --每次在1号的基础之上累加一
               end
               print '--------------------------------------------'
             end
             else begin
               print '平年:'+convert(varchar(4),year(@date))+'年'
               print '2月:28天' 
               print '此处可参考平年算法'             
             end
          end
          else begin
               print '闰年:'+convert(varchar(4),year(@date))+'年'
               print '2月:29天'
               print '此处可参考与计算正纪年闰年算法'           
          end
            
     end
     else begin
               print '平年:'+convert(varchar(4),year(@date))+'年'
               print '2 月:28天'+char(13)+char(10)+'平年:'+convert(varchar(4),year(@date))+'年'+'2月'
               print '--------------------------------------------'              
               print ' 日 一 二 三 四 五 六'
               print '--------------------------------------------'
               --循环输出二月天数
               declare @num_P int =1,@numstr_P  varchar(50) = '',@TempDate  datetime
               set @date =convert(date,convert(date,(convert(varchar(4),year(@date))+'-02-01')),120)
              
               while(@num_P <=28) begin
                   set @date = dateadd(dd,@num_P-1,@date)
                   --控制空格数量
                   if(@num_P<10) begin
                     set @numstr_P +=space(2)+convert(varchar(20),@num_P)
                   end
                   else begin
                     set @numstr_P +=space(1)+convert(varchar(20),@num_P)
                   end 
                                 
       --控制打印
       if(datepart(dw,convert(date,@date,120)) = 7) begin
          set @TempDate = convert(date,convert(date,(convert(varchar(4),year(@date))+'-02-01')),120)
          if(datepart(dw,@TempDate) = 1 ) begin           --星期日
            set @numstr_P = space(0)+@numstr_P  
          end
          else if(datepart(dw,@TempDate) = 2 and dateadd(dd,-5,@date) = @TempDate) begin      --星期一
            set @numstr_P = space(3)+@numstr_P
          end
          else if(datepart(dw,@TempDate) = 3 and dateadd(dd,-4,@date) = @TempDate) begin      --星期二
            set @numstr_P = space(6)+@numstr_P
          end
          else if(datepart(dw,@TempDate) = 4 and dateadd(dd,-3,@date) = @TempDate) begin      --星期三
            set @numstr_P = space(9)+@numstr_P
          end
          else if(datepart(dw,@TempDate) = 5 and dateadd(dd,-2,@date) = @TempDate) begin      --星期四
            set @numstr_P = space(12)+@numstr_P
          end
          else if(datepart(dw,@TempDate) = 6 and dateadd(dd,-1,@date) = @TempDate) begin      --星期五
            set @numstr_P = space(15)+@numstr_P
          end
          else if(datepart(dw,@TempDate) = 7 and dateadd(dd,0,@date)  = @TempDate) begin      --星期六
            set @numstr_P = space(18)+@numstr_P
          end
                    
           print @numstr_P      --打印输出
           set @numstr_P = ''       
       end
       --打印输出
       if(@num_P =28) begin print @numstr_P end
                  
                   set @num_P +=1   --累加
                   set @date =convert(date,convert(date,(convert(varchar(4),year(@date))+'-02-01')),120) --每次在1号的基础之上累加一
               end
               print '--------------------------------------------'
                      
     end
end

0 0
原创粉丝点击