300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql 公历变农历_SQLServer公历转农历函数(1900年-2049年)

mysql 公历变农历_SQLServer公历转农历函数(1900年-2049年)

时间:2024-04-27 10:51:48

相关推荐

mysql 公历变农历_SQLServer公历转农历函数(1900年-2049年)

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。