打印本文 打印本文 关闭窗口 关闭窗口
SQL Server中如何计算农历
作者:武汉SEO闵涛  文章来源:敏韬网  点击数3112  更新时间:2007/11/14 11:07:30  文章录入:mintao  责任编辑:mintao
i=@i+1          
   END          
             
   IF  @offset  <=  0          
   BEGIN          
       SET  @offset=@offset+@yDays          
       SET  @i=@i-1          
   END          
   --确定农历年结束              
   SET  @YEAR=@i          
     
   --确定农历月开始          
   SET  @i  =  1          
   SELECT  @iLunar=dataInt  FROM  SolarData  WHERE  yearId=@YEAR      
     
   --判断那个月是润月          
   SET  @mLeap  =  @iLunar  &  15          
   SET  @bLeap  =  0        
     
   WHILE  @i  <  13  AND  @offset  >  0          
   BEGIN          
       --判断润月          
       SET  @mDays=0          
       IF  (@mLeap  >  0  AND  @i  =  (@mLeap+1)  AND  @bLeap=0)          
       BEGIN--是润月          
           SET  @i=@i-1          
           SET  @bLeap=1          
           --传回农历年闰月的天数          
           IF  @iLunar  &  65536  >  0          
               SET  @mDays  =  30          
           ELSE            
               SET  @mDays  =  29          
       END          
       ELSE          
       --不是润月          
       BEGIN          
           SET  @j=1          
           SET  @temp  =  65536            
           WHILE  @j<=@i          
           BEGIN          
               SET  @temp=@temp/2          
               SET  @j=@j+1          
           END          
         
           IF  @iLunar  &  @temp  >  0          
               SET  @mDays  =  30          
           ELSE          
               SET  @mDays  =  29          
       END          
             
       --解除闰月      
       IF  @bLeap=1  AND  @i=  (@mLeap+1)      
           SET  @bLeap=0      
     
       SET  @offset=@offset-@mDays          
       SET  @i=@i+1          
   END          
         
   IF  @offset  <=  0          
   BEGIN          
       SET  @offset=@offset+@mDays          
       SET  @i=@i-1          
   END          
     
   --确定农历月结束              
   SET  @MONTH=@i      
         
   --确定农历日结束              
   SET  @DAY=@offset          
         
   SET  @OUTPUTDATE=CAST((CAST(@YEAR  AS  VARCHAR(4))+''''-''''+CAST(@MONTH  AS  VARCHAR(2))+''''-''''+CAST(@DAY  AS  VARCHAR(2)))  AS  DATETIME)          
   RETURN  @OUTPUTDATE      
END        
 
----------------------------------------------------------------------  
--调用方法  
select  dbo.fn_GetLunar(getdate())  
---------------------------------------------------------------------
已知问题:由于农历每月只有29天或者30天,所以这个函数返回是一个日期型数据是不恰当的,严谨的应该返回字符型数据!(感谢J9988指正)

上一页  [1] [2] [3] 

打印本文 打印本文 关闭窗口 关闭窗口