• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

               C++ 技術中心

               :: 首頁 :: 聯系 ::  :: 管理
              160 Posts :: 0 Stories :: 87 Comments :: 0 Trackbacks

            公告

            鄭重聲明:本BLOG所發表的原創文章,作者保留一切權利。必須經過作者本人同意后方可轉載,并注名作者(天空)和出處(CppBlog.com)。作者Email:coder@luckcoder.com

            留言簿(27)

            搜索

            •  

            最新隨筆

            最新評論

            評論排行榜

             

             

            if object_id('SolarData'is not null
                
            drop table SolarData
            go
            create table SolarData  
            (  
              yearid 
            int not null,  
              data 
            char(7not null,  
              dataint 
            int not null  
            )   
            --插入數據  
            insert into   
            SolarData 
            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  
            GO



            if object_id('Proc_ConvertLunar'is not null
                
            drop function Proc_ConvertLunar
            go 
            create function Proc_ConvertLunar(@solarday datetime)      
            returns nvarchar(30)    
            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 @mleap1 int    
              
            declare @mleapnum int      
              
            declare @bleap smallint      
              
            declare @temp int      
              
            declare @year nvarchar(10)       
              
            declare @month nvarchar(10)      
              
            declare @day nvarchar(10)  
              
            declare @chinesenum nvarchar(10)         
              
            declare @outputdate nvarchar(30)
              
            set @offset=datediff(day,'1900-01-30',@solarday)      
              
            --確定農歷年開始      
              set @i=1900      
              
            --set @offset=@soldata      
              while @i<2050 and @offset>0      
              
            begin      
                
            set @ydays=348      
                
            set @mleapnum=0      
                
            select @ilunar=dataint from solardata where yearid=@i      
                 
                
            --傳回農歷年的總天數      
                set @j=32768      
                
            while @j>8      
                
            begin      
                  
            if @ilunar & @j >0      
                    
            set @ydays=@ydays+1      
                  
            set @j=@j/2      
                
            end      
                
            --傳回農歷年閏哪個月 1-12 , 沒閏傳回 0      
                set @mleap = @ilunar & 15      
                
            --傳回農歷年閏月的天數 ,加在年的總天數上      
                if @mleap > 0      
                
            begin      
                  
            if @ilunar & 65536 > 0      
                    
            set @mleapnum=30      
                  
            else       
                    
            set @mleapnum=29           
                  
            set @ydays=@ydays+@mleapnum      
                
            end      
                
            set @offset=@offset-@ydays      
                
            set @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+1and @bleap=0)      
                
            begin--是潤月      
                  set @i=@i-1      
                  
            set @bleap=1 
                  
            set @mleap1= @mleap              
                  
            --傳回農歷年閏月的天數      
                  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=ltrim(@offset




              
            --輸出日期
            set @outputdate=@year+'-'+@month+'-'+@day

              
            return @outputdate
            end
            GO 




            --生成1900至2045年農歷與公歷對照表
            if object_id('LunarCalenderContrastTable'is not null
                
            drop table LunarCalenderContrastTable

            GO

            create table LunarCalenderContrastTable
            (
            Calender 
            datetime,
            Lunar 
            datetime
            )
            GO

            BEGIN

            declare @i int
            declare @day nvarchar(10

            set @i= DATEDIFF(day,'1900-1-1','2020-1-1')
            while @i>0
            begin
              
            set @day=dateadd(d,@i,'1900-1-1')
              
            insert into LunarCalenderContrastTable(Calender,Lunar) values(@day,dbo.Proc_ConvertLunar(@day))
              
            set @i=@i-1
            end
            END

            GO

            --存儲過程查詢生日
            if object_id('GetCalender'is not null
                
            drop function GetCalender
            go 
            create function dbo.GetCalender(
            @month varchar(3),
            @day   varchar(3),
            @now datetime)
            returns datetime   
            as
            begin
              
            declare @years varchar(10)
              
            declare @dates varchar(12)
              
              
            set @years= year(@now)
              
            set @dates=@years+'-'+@month+'-'+@day
              
            return(select Calender from LunarCalenderContrastTable where Lunar =@dates)
            end

            GO

            --測試
            select dbo.GetCalender(2,7,getdate())

             

             

             

            create function dbo.fn_GetLunar(@solarday datetime)      
            returns nvarchar(30)    
            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 @mleap1 int    
              
            declare @mleapnum int      
              
            declare @bleap smallint      
              
            declare @temp int      
              
            declare @year nvarchar(10)       
              
            declare @month nvarchar(10)      
              
            declare @day nvarchar(10)  
              
            declare @chinesenum nvarchar(10)         
              
            declare @outputdate nvarchar(30)       
              
            set @offset=datediff(day,'1900-01-30',@solarday)      
              
            --確定農歷年開始      
              set @i=1900      
              
            --set @offset=@soldata      
              while @i<2050 and @offset>0      
              
            begin      
                
            set @ydays=348      
                
            set @mleapnum=0      
                
            select @ilunar=dataint from solardata where yearid=@i      
                 
                
            --傳回農歷年的總天數      
                set @j=32768      
                
            while @j>8      
                
            begin      
                  
            if @ilunar & @j >0      
                    
            set @ydays=@ydays+1      
                  
            set @j=@j/2      
                
            end      
                
            --傳回農歷年閏哪個月 1-12 , 沒閏傳回 0      
                set @mleap = @ilunar & 15      
                
            --傳回農歷年閏月的天數 ,加在年的總天數上      
                if @mleap > 0      
                
            begin      
                  
            if @ilunar & 65536 > 0      
                    
            set @mleapnum=30      
                  
            else       
                    
            set @mleapnum=29           
                  
            set @ydays=@ydays+@mleapnum      
                
            end      
                
            set @offset=@offset-@ydays      
                
            set @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+1and @bleap=0)      
                
            begin--是潤月      
                  set @i=@i-1      
                  
            set @bleap=1 
                  
            set @mleap1= @mleap              
                  
            --傳回農歷年閏月的天數      
                  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=ltrim(@offset
              
            --輸出日期
              set @chinesenum=N'〇一二三四五六七八九十'   
              
            while len(@year)>0
              
            select @outputdate=isnull(@outputdate,'')
                     
            + substring(@chinesenum,left(@year,1)+1,1)
                     , 
            @year=stuff(@year,1,1,'')
              
            set @outputdate=@outputdate+N''
                     
            + case @mleap1 when @month then N'' else '' end
              
            if cast(@month as int)<10
                
            set @outputdate=@outputdate 
                     
            + case @month when 1 then N''
                         
            else substring(@chinesenum,left(@month,1)+1,1
                       
            end
              
            else if cast(@month as int)>=10
                
            set @outputdate=@outputdate
                     
            + case @month when '10' then N'' when 11 then N'十一' 
                       
            else N'十二' end 
              
            set @outputdate=@outputdate + N''
              
            if cast(@day as int)<10
                
            set @outputdate=@outputdate + N''
                     
            + substring(@chinesenum,left(@day,1)+1,1)
              
            else if @day between '10' and '19'
                
            set @outputdate=@outputdate
                     
            + case @day when '10' then N'初十' else N''+
                       
            substring(@chinesenum,right(@day,1)+1,1end
              
            else if @day between '20' and '29'
                
            set @outputdate=@outputdate
                     
            + case @day when '20' then N'二十' else N'廿' end
                     
            + case @day when '20' then N'' else 
                       
            substring(@chinesenum,right(@day,1)+1,1end
              
            else 
                
            set @outputdate=@outputdate+N'三十'
              
            return @outputdate
            end
            GO 
            posted on 2011-09-15 19:49 C++技術中心 閱讀(3080) 評論(1)  編輯 收藏 引用 所屬分類: MSSQL

            Feedback

            # re: 公歷轉農歷SQL 2011-09-15 23:59 cheap lace wigs
            好強大,感謝分享,正要用到  回復  更多評論
              

            国产精品对白刺激久久久| 久久天天躁狠狠躁夜夜av浪潮| 一级做a爰片久久毛片看看| 午夜精品久久久久久中宇| 久久99久久99小草精品免视看| 久久精品国产精品亚洲人人 | 国产精品久久久久a影院| 久久精品国产清高在天天线| 久久精品国产亚洲一区二区三区| 蜜臀久久99精品久久久久久| 久久久久亚洲AV无码网站| 国产农村妇女毛片精品久久| 97久久久久人妻精品专区| 亚洲中文字幕无码久久精品1| 伊人久久五月天| 久久伊人精品青青草原日本| 无码超乳爆乳中文字幕久久| 久久精品中文字幕一区| 无码伊人66久久大杳蕉网站谷歌 | 久久成人18免费网站| 99国内精品久久久久久久| 伊人久久综合热线大杳蕉下载| 欧美成人免费观看久久| 精品多毛少妇人妻AV免费久久| 日本人妻丰满熟妇久久久久久| 亚洲精品美女久久久久99| 久久激情亚洲精品无码?V| 777米奇久久最新地址| 一本久久知道综合久久| 精品熟女少妇aⅴ免费久久| 国产精品久久久久久搜索| 久久国产精品成人影院| 亚洲国产另类久久久精品小说| 国产精品久久久久久久app| 久久伊人五月天论坛| 久久久久亚洲AV成人网| a级毛片无码兔费真人久久| 中文字幕亚洲综合久久2| 久久99精品国产| 伊人久久综在合线亚洲2019| 国产国产成人久久精品|