国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

SQL Server中如何計算農(nóng)歷

2024-08-31 00:48:19
字體:
供稿:網(wǎng)友
  • 網(wǎng)站運營seo文章大全
  • 提供全面的站長運營經(jīng)驗及seo技術!

  • 1、建一表,放初始化資料  
    因為農(nóng)歷的日期,是由天文學家推算出來的,到現(xiàn)在只有到2049年的,以后的有了還可以加入!  
    create  table  solardata  
    (  
           yearid  int  not  null,  
           data  char(7)  not  null,  
           dataint  int  not  null  
    )  
     
    --插入數(shù)據(jù)  
    insert  into    
    solardataa  select  1900,'0x04bd8',19416  union  all  select  1901,'0x04ae0',19168  
    union  all  select  1902,'0x0a570',42352  union  all  select  1903,'0x054d5',21717  
    union  all  select  1904,'0x0d260',53856  union  all  select  1905,'0x0d950',55632  
    union  all  select  1906,'0x16554',91476  union  all  select  1907,'0x056a0',22176  
    union  all  select  1908,'0x09ad0',39632  union  all  select  1909,'0x055d2',21970  
    union  all  select  1910,'0x04ae0',19168  union  all  select  1911,'0x0a5b6',42422  
    union  all  select  1912,'0x0a4d0',42192  union  all  select  1913,'0x0d250',53840  
    union  all  select  1914,'0x1d255',119381  union  all  select  1915,'0x0b540',46400  
    union  all  select  1916,'0x0d6a0',54944  union  all  select  1917,'0x0ada2',44450  
    union  all  select  1918,'0x095b0',38320  union  all  select  1919,'0x14977',84343  
    union  all  select  1920,'0x04970',18800  union  all  select  1921,'0x0a4b0',42160  
    union  all  select  1922,'0x0b4b5',46261  union  all  select  1923,'0x06a50',27216  
    union  all  select  1924,'0x06d40',27968  union  all  select  1925,'0x1ab54',109396  
    union  all  select  1926,'0x02b60',11104  union  all  select  1927,'0x09570',38256  
    union  all  select  1928,'0x052f2',21234  union  all  select  1929,'0x04970',18800  
    union  all  select  1930,'0x06566',25958  union  all  select  1931,'0x0d4a0',54432  
    union  all  select  1932,'0x0ea50',59984  union  all  select  1933,'0x06e95',28309  
    union  all  select  1934,'0x05ad0',23248  union  all  select  1935,'0x02b60',11104  
    union  all  select  1936,'0x186e3',100067  union  all  select  1937,'0x092e0',37600  
    union  all  select  1938,'0x1c8d7',116951  union  all  select  1939,'0x0c950',51536  
    union  all  select  1940,'0x0d4a0',54432  union  all  select  1941,'0x1d8a6',120998  
    union  all  select  1942,'0x0b550',46416  union  all  select  1943,'0x056a0',22176  
    union  all  select  1944,'0x1a5b4',107956  union  all  select  1945,'0x025d0',9680  
    union  all  select  1946,'0x092d0',37584  union  all  select  1947,'0x0d2b2',53938  
    union  all  select  1948,'0x0a950',43344  union  all  select  1949,'0x0b557',46423  
    union  all  select  1950,'0x06ca0',27808  union  all  select  1951,'0x0b550',46416  
    union  all  select  1952,'0x15355',86869  union  all  select  1953,'0x04da0',19872  
    union  all  select  1954,'0x0a5d0',42448  union  all  select  1955,'0x14573',83315  
    union  all  select  1956,'0x052d0',21200  union  all  select  1957,'0x0a9a8',43432  
    union  all  select  1958,'0x0e950',59728  union  all  select  1959,'0x06aa0',27296  
    union  all  select  1960,'0x0aea6',44710  union  all  select  1961,'0x0ab50',43856  
    union  all  select  1962,'0x04b60',19296  union  all  select  1963,'0x0aae4',43748  
    union  all  select  1964,'0x0a570',42352  union  all  select  1965,'0x05260',21088  
    union  all  select  1966,'0x0f263',62051  union  all  select  1967,'0x0d950',55632  
    union  all  select  1968,'0x05b57',23383  union  all  select  1969,'0x056a0',22176  
    union  all  select  1970,'0x096d0',38608  union  all  select  1971,'0x04dd5',19925  
    union  all  select  1972,'0x04ad0',19152  union  all  select  1973,'0x0a4d0',42192  
    union  all  select  1974,'0x0d4d4',54484  union  all  select  1975,'0x0d250',53840  
    union  all  select  1976,'0x0d558',54616  union  all  select  1977,'0x0b540',46400  
    union  all  select  1978,'0x0b5a0',46496  union  all  select  1979,'0x195a6',103846  
    union  all  select  1980,'0x095b0',38320  union  all  select  1981,'0x049b0',18864  
    union  all  select  1982,'0x0a974',43380  union  all  select  1983,'0x0a4b0',42160  
    union  all  select  1984,'0x0b27a',45690  union  all  select  1985,'0x06a50',27216  
    union  all  select  1986,'0x06d40',27968  union  all  select  1987,'0x0af46',44870  
    union  all  select  1988,'0x0ab60',43872  union  all  select  1989,'0x09570',38256  
    union  all  select  1990,'0x04af5',19189  union  all  select  1991,'0x04970',18800  
    union  all  select  1992,'0x064b0',25776  union  all  select  1993,'0x074a3',29859  
    union  all  select  1994,'0x0ea50',59984  union  all  select  1995,'0x06b58',27480  
    union  all  select  1996,'0x055c0',21952  union  all  select  1997,'0x0ab60',43872  
    union  all  select  1998,'0x096d5',38613  union  all  select  1999,'0x092e0',37600  
    union  all  select  2000,'0x0c960',51552  union  all  select  2001,'0x0d954',55636  
    union  all  select  2002,'0x0d4a0',54432  union  all  select  2003,'0x0da50',55888  
    union  all  select  2004,'0x07552',30034  union  all  select  2005,'0x056a0',22176  
    union  all  select  2006,'0x0abb7',43959  union  all  select  2007,'0x025d0',9680  
    union  all  select  2008,'0x092d0',37584  union  all  select  2009,'0x0cab5',51893  
    union  all  select  2010,'0x0a950',43344  union  all  select  2011,'0x0b4a0',46240  
    union  all  select  2012,'0x0baa4',47780  union  all  select  2013,'0x0ad50',44368  
    union  all  select  2014,'0x055d9',21977  union  all  select  2015,'0x04ba0',19360  
    union  all  select  2016,'0x0a5b0',42416  union  all  select  2017,'0x15176',86390  
    union  all  select  2018,'0x052b0',21168  union  all  select  2019,'0x0a930',43312  
    union  all  select  2020,'0x07954',31060  union  all  select  2021,'0x06aa0',27296  
    union  all  select  2022,'0x0ad50',44368  union  all  select  2023,'0x05b52',23378  
    union  all  select  2024,'0x04b60',19296  union  all  select  2025,'0x0a6e6',42726  
    union  all  select  2026,'0x0a4e0',42208  union  all  select  2027,'0x0d260',53856  
    union  all  select  2028,'0x0ea65',60005  union  all  select  2029,'0x0d530',54576  
    union  all  select  2030,'0x05aa0',23200  union  all  select  2031,'0x076a3',30371  
    union  all  select  2032,'0x096d0',38608  union  all  select  2033,'0x04bd7',19415  
    union  all  select  2034,'0x04ad0',19152  union  all  select  2035,'0x0a4d0',42192  
    union  all  select  2036,'0x1d0b6',118966  union  all  select  2037,'0x0d250',53840  
    union  all  select  2038,'0x0d520',54560  union  all  select  2039,'0x0dd45',56645  
    union  all  select  2040,'0x0b5a0',46496  union  all  select  2041,'0x056d0',22224  
    union  all  select  2042,'0x055b2',21938  union  all  select  2043,'0x049b0',18864  
    union  all  select  2044,'0x0a577',42359  union  all  select  2045,'0x0a4b0',42160  
    union  all  select  2046,'0x0aa50',43600  union  all  select  2047,'0x1b255',111189  
    union  all  select  2048,'0x06d20',27936  union  all  select  2049,'0x0ada0',44448  

    --===============================================================

    --然后就可以用這個函數(shù)來取農(nóng)歷日期了  
     
    create  function  fn_getlunar(@solarday  datetime)          
    returns  datetime      
         
    as          
    begin          
       declare  @soldata  int          
       declare  @offset  int          
       declare  @ilunar  int          
       declare  @i  int            
       declare  @j  int            
       declare  @ydays  int          
       declare  @mdays  int          
       declare  @mleap  int          
       declare  @mleapnum  int          
       declare  @bleap  smallint          
       declare  @temp  int          
             
       declare  @year  int            
       declare  @month  int          
       declare  @day  int          
                 
       declare  @outputdate  datetime          
         
       --保證傳進來的日期是不帶時間          
       set  @solarday=cast(@solarday  as  char(10))          
       set  @offset=cast(@solarday-'1900-01-30'  as  int)      
         
             
       --確定農(nóng)歷年開始          
       set  @i=1900          
       --set  @[email protected]          
       while  @i<2050  and  @offset>0          
       begin          
           set  @ydays=348          
           set  @mleapnum=0          
           select  @ilunar=dataint  from  solardata  where  [email protected]          
             
           --傳回農(nóng)歷年的總天數(shù)          
           set  @j=32768          
           while  @j>8          
           begin          
               if  @ilunar  &  @j  >0          
                   set  @[email protected]+1          
               set  @[email protected]/2          
           end          
             
           --傳回農(nóng)歷年閏哪個月  1-12  ,  沒閏傳回  0          
           set  @mleap  =  @ilunar  &  15          
             
           --傳回農(nóng)歷年閏月的天數(shù)  ,加在年的總天數(shù)上          
           if  @mleap  >  0          
           begin          
               if  @ilunar  &  65536  >  0          
                   set  @mleapnum=30          
               else            
                   set  @mleapnum=29          
             
               set  @[email protected][email protected]          
           end          
                     
           set  @[email protected]@ydays          
           set  @[email protected]+1          
       end          
                 
       if  @offset  <=  0          
       begin          
           set  @[email protected][email protected]          
           set  @[email protected]          
       end          
       --確定農(nóng)歷年結(jié)束              
       set  @[email protected]          
         
       --確定農(nóng)歷月開始          
       set  @i  =  1          
       select  @ilunar=dataint  from  solardata  where  [email protected]      
         
       --判斷那個月是潤月          
       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  @[email protected]          
               set  @bleap=1          
               --傳回農(nóng)歷年閏月的天數(shù)          
               if  @ilunar  &  65536  >  0          
                   set  @mdays  =  30          
               else            
                   set  @mdays  =  29          
           end          
           else          
           --不是潤月          
           begin          
               set  @j=1          
               set  @temp  =  65536            
               while  @j<[email protected]          
               begin          
                   set  @[email protected]/2          
                   set  @[email protected]+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  @[email protected]@mdays          
           set  @[email protected]+1          
       end          
             
       if  @offset  <=  0          
       begin          
           set  @[email protected][email protected]          
           set  @[email protected]          
       end          
         
       --確定農(nóng)歷月結(jié)束              
       set  @[email protected]      
             
       --確定農(nóng)歷日結(jié)束              
       set  @[email protected]          
             
       set  @outputdate=cast((cast(@year  as  varchar(4))+'-'+cast(@month  as  varchar(2))+'-'+cast(@day  as  varchar(2)))  as  datetime)          
       return  @outputdate      
    end        
     
    ----------------------------------------------------------------------  
    --調(diào)用方法  
    select  dbo.fn_getlunar(getdate())  
    ---------------------------------------------------------------------
    已知問題:由于農(nóng)歷每月只有29天或者30天,所以這個函數(shù)返回是一個日期型數(shù)據(jù)是不恰當?shù)模瑖乐數(shù)膽摲祷刈址蛿?shù)據(jù)!(感謝j9988指正)

    發(fā)表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發(fā)表
    主站蜘蛛池模板: 息烽县| 常熟市| 内丘县| 宾川县| 灵武市| 板桥市| 弥勒县| 十堰市| 松桃| 苍南县| 新丰县| 永福县| 四川省| 延安市| 龙门县| 伊通| 志丹县| 宁德市| 交口县| 蒙自县| 禹州市| 荥经县| 交口县| 云浮市| 印江| 睢宁县| 固始县| 安阳县| 黄龙县| 侯马市| 湘潭县| 武鸣县| 崇阳县| 梧州市| 南汇区| 黄大仙区| 奉节县| 华亭县| 密云县| 襄垣县| 岳西县|