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 < 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
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
yearId databin dataInt
1900 19416 19416
1901 19168 19168
1902 42352 42352
1903 21717 21717
1904 53856 53856
1905 55632 55632
1906 91476 91476
1907 22176 22176
1908 39632 39632
1909 21970 21970
1910 19168 19168
1911 42422 42422
1912 42192 42192
1913 53840 53840
1914 119381 119381
1915 46400 46400
1916 54944 54944
1917 44450 44450
1918 38320 38320
1919 84343 84343
1920 18800 18800
1921 42160 42160
1922 46261 46261
1923 27216 27216
1924 27968 27968
1925 109396 109396
1926 11104 11104
1927 38256 38256
1928 21234 21234
1929 18800 18800
1930 25958 25958
1931 54432 54432
1932 59984 59984
1933 28309 28309
1934 23248 23248
1935 11104 11104
1936 100067 100067
1937 37600 37600
1938 116951 116951
1939 51536 51536
1940 54432 54432
1941 120998 120998
1942 46416 46416
1943 22176 22176
1944 107956 107956
1945 9680 9680
1946 37584 37584
1947 53938 53938
1948 43344 43344
1949 46423 46423
1950 27808 27808
1951 46416 46416
1952 86869 86869
1953 19872 19872
1954 42448 42448
1955 83315 83315
1956 21200 21200
1957 43432 43432
1958 59728 59728
1959 27296 27296
1960 44710 44710
1961 43856 43856
1962 19296 19296
1963 43748 43748
1964 42352 42352
1965 21088 21088
1966 62051 62051
1967 55632 55632
1968 23383 23383
1969 22176 22176
1970 38608 38608
1971 19925 19925
1972 19152 19152
1973 42192 42192
1974 54484 54484
1975 53840 53840
1976 54616 54616
1977 46400 46400
1978 46496 46496
1979 103846 103846
1980 38320 38320
1981 18864 18864
1982 43380 43380
1983 42160 42160
1984 45690 45690
1985 27216 27216
1986 27968 27968
1987 44870 44870
1988 43872 43872
1989 38256 38256
1990 19189 19189
1991 18800 18800
1992 25776 25776
1993 29859 29859
1994 59984 59984
1995 27480 27480
1996 21952 21952
1997 43872 43872
1998 38613 38613
1999 37600 37600
2000 51552 51552
2001 55636 55636
2002 54432 54432
2003 55888 55888
2004 30034 30034
2005 22176 22176
2006 43959 43959
2007 9680 9680
2008 37584 37584
2009 51893 51893
2010 43344 43344
2011 46240 46240
2012 47780 47780
2013 44368 44368
2014 21977 21977
2015 19360 19360
2016 42416 42416
2017 86390 86390
2018 21168 21168
2019 43312 43312
2020 31060 31060
2021 27296 27296
2022 44368 44368
2023 23378 23378
2024 19296 19296
2025 42726 42726
2026 42208 42208
2027 53856 53856
2028 60005 60005
2029 54576 54576
2030 23200 23200
2031 30371 30371
2032 38608 38608
2033 19415 19415
2034 19152 19152
2035 42192 42192
2036 118966 118966
2037 53840 53840
2038 54560 54560
2039 56645 56645
2040 46496 46496
2041 22224 22224
2042 21938 21938
2043 18864 18864
2044 42359 42359
2045 42160 42160
2046 43600 43600
2047 111189 111189
2048 27936 27936
2049 44448 44448
本文转自tiasys博客园博客,原文链接:http://www.cnblogs.com/tiasys/p/3581687.html,如需转载请自行联系原作者
SQLServer公历转农历函数(1900年-2049年)相关推荐
- mysql 公历变农历_SQLServer公历转农历函数(1900年-2049年)
ALTER FUNCTION [dbo].[f_SysGetLunar]( @solarDay DATETIME) RETURNS varchar(200) AS BEGIN --转自 ...
- uniapp 原生js实现公历转农历
代码思路在下面这个博客,我这里只是记录一下我是怎么在uniapp里使用的 原生js实现公历转农历_xm2by的博客-CSDN博客_javascript 农历原生js实现公历转农历参考文献:[1] 19 ...
- js获取当前农历年月 原生js实现公历转农历
原生js实现公历转农历(转载) 网上原生JS实现公历转农历的代码参差不齐,个人经过项目实践后发现有个博主的写的很好使用起来也很方便,于是一起分享给大家. 原博主的代码是在vue框架下写的,具体如下: ...
- 关于“1900年至2100年公历、农历互转的js代码”的详细分析
今天讲的是对1900年至2100年公历.农历互转的js代码进行详细分析! 首先来看一下js里面的方法都得到了哪些有用的数据--这里直接在html文档里面引入该js文件,然后调用对应的方法: <s ...
- 51单片机农历转换公历c语言算法,C51写的51单片机用公历转农历和星期程序
点击此处下载 ourdev_615042D2O2A7.pdf(文件大小:154K) (原文件名:公历与农历日期的转换.pdf) #define uchar unsigned char #define ...
- python公历转农历_Python如何实现阳历转阴历的方法分享
这篇文章主要介绍了Python实现公历(阳历)转农历(阴历)的方法,涉及农历算法原理及Python日期运算相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python实现公历(阳历)转农历(阴历)的 ...
- 公历转农历C/C++代码
** **公历转农历C/C++的实现 ** 本实现的算法,主要来自网络和加入自己的需要完善而来,有同样需要的人可以参考一下: 联系:domics.cn 用法: 备注:此文件是visual studio ...
- Lua 公历转农历以及24节气计算
同上一篇公历转农历,但是这篇包含了节气计算,非打表法 --- --- Created by Administrator. --- DateTime: 2022/5/5 0005 18:04 --- m ...
- 公历转农历的python实现
公历转农历的python实现 大杂烩.作为自己的记录,保存. 两个要点: 1.公历转农历用了查表法(第126行) 2.节气用了天文法?(第176行) 运行图 (背景是hao123万年历) 源代码: ...
- 原生js实现公历转农历
原生js实现公历转农历 写在前面:在实现公历转农历代码之前,最好能够了解它们之间转换的思路,可以先看看这篇文章,了解思路之后,接下来就是将思路翻译为代码: 思路: 1.建立农历年份查询表 2.计算输入 ...
最新文章
- tensorflow op tf.global_variables_initializer
- oracle中显示周,oracle中得到一段时间内天,月,周列表
- 生成器/迭代器 和 函数的递归
- oracle创建用户名授权,oracle创建用户及授权创建表
- 如何将TXT,EXCEL或CSV数据导入ORACLE到对应表中
- 日本的电视节目到底能有多特别?
- HDU-简易版之最短距离(最短路)
- cocos2dx 3.x Node::schedule
- python—符号 | ^的使用
- Vuforia3D模型上传
- 【Java】俄罗斯方块Java版
- windows 下 修改mysql配置文件
- 摆脱学校WiFi的设备数限制——无线桥接
- 多元均值不等式的简单证明(调和平均数与算术平均数)
- 朋友圈点赞的测试用例
- 谁说NTFS不支持UEFI启动的?启动U盘放不了超过4G的文件怎么办?Server2016 Win10 U盘UEFI启动制作方法
- ubuntu桌面便签_在Ubuntu 上有什么必装的实用软件?
- configure文件的生成
- 如何查看当前Ubuntu的版本
- 低功耗蓝牙BLE之广播
热门文章
- matlab 最优化编程,Matlab最优化编程例子
- 语言 蜗牛爬树问题_育儿小知识:睡前聊天,也会提升孩子的语言能力!
- memcached java api_Memcached Java Client API详解
- 多个项目共用同一个redis_比Redis快5倍的中间件,为啥这么快?
- ad一张图纸绘制多图_你知道,为什么工程图纸都是蓝图纸,而不是白色黄色红色?...
- spark学习——(二)spark基础环境配置-linux(1)
- predix平台_协同网络系统化方案(一)通用电气predix平台案例分享
- vscode 添加库头文件_VSCode配置C/C++并添加非工作区头文件的方法
- linux重启网络服务后什么端口都不通,linux的端口不通怎么解决
- Kettle JAVA代码表达式