ALTER FUNCTION [dbo].[f_SysGetLunar](
@solarDay DATETIME)
RETURNS varchar(200)
AS
BEGIN
--转自CSDN 挖土
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 varchar(100)
--保证传进来的日期是不带时间
SET @solarDay=cast(@solarDay AS char(10))
SET @offset=CAST(@solarDay-'1900-01-30' AS INT)
--确定农历年开始
SET @i=1900
--SET @offset=@solData
WHILE @i<2050 AND @offset>0
BEGIN
SET @yDays=348
SET @mLeapNum=0
SELECT @iLunar=dataInt FROM Sysc80 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 Sysc80 WHERE yearId=@YEAR
--判断那个月是润月
SET @mLeap = @iLunar & 15
SET @bLeap = 0
WHILE @i 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
if @bLeap=1
SET @OUTPUTDATE=(CAST(@YEAR AS VARCHAR(4))+'-润'+CAST(@MONTH AS VARCHAR(2))+'-'+CAST(@DAY AS VARCHAR(2)))
else
SET @OUTPUTDATE=(CAST(@YEAR AS VARCHAR(4))+'-'+CAST(@MONTH AS VARCHAR(2))+'-'+CAST(@DAY AS VARCHAR(2)))
RETURN @OUTPUTDATE
END
--********************************************************
--Sysc80表内容
select * from Sysc80
yearIddatabindataInt
19001941619416
19011916819168
19024235242352
19032171721717
19045385653856
19055563255632
19069147691476
19072217622176
19083963239632
19092197021970
19101916819168
19114242242422
19124219242192
19135384053840
1914119381119381
19154640046400
19165494454944
19174445044450
19183832038320
19198434384343
1980018800
19214216042160
19224626146261
19232721627216
19242796827968
1925109396109396
19261110411104
19273825638256
19282123421234
19291880018800
19302595825958
19315443254432
19325998459984
19332830928309
19342324823248
19351110411104
1936100067100067
19373760037600
1938116951116951
19395153651536
19405443254432
1941120998120998
19424641646416
19432217622176
1944107956107956
194596809680
19463758437584
19475393853938
19484334443344
19494642346423
19502780827808
19514641646416
19528686986869
19531987219872
19544244842448
19558331583315
19562120021200
19574343243432
19585972859728
19592729627296
19604471044710
19614385643856
19621929619296
19634374843748
19644235242352
19652108821088
19666205162051
19675563255632
19682338323383
19692217622176
19703860838608
19711992519925
19721915219152
19734219242192
19745448454484
19755384053840
19765461654616
19774640046400
19784649646496
1979103846103846
19803832038320
19811886418864
19824338043380
19834216042160
19844569045690
19852721627216
19862796827968
19874487044870
19884387243872
19893825638256
19901918919189
19911880018800
19922577625776
19932985929859
19945998459984
19952748027480
19962195221952
19974387243872
19983861338613
19993760037600
20005155251552
20015563655636
20025443254432
5588855888
3003430034
2217622176
4395943959
96809680
3758437584
5189351893
4334443344
4624046240
4778047780
4436844368
2197721977
1936019360
4241642416
8639086390
2116821168
4331243312
3106031060
2729627296
4436844368
2337823378
20241929619296
20254272642726
20264220842208
20275385653856
20286000560005
20295457654576
20302320023200
20313037130371
20323860838608
20331941519415
20341915219152
20354219242192
2036118966118966
20375384053840
20385456054560
20395664556645
20404649646496
20412222422224
20422193821938
20431886418864
20444235942359
20454216042160
20464360043600
2047111189111189
20482793627936
20494444844448