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

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

mysql 公历变农历_SQLServer公历转农历函数(1900年-2049年)相关推荐

  1. mysql sql字段切割_sqlserver中字符串切割函数总结

    本文章收藏了大量的在sqlserver中字符串切割函数,包括了自用自定义函数或sql带带的函数来操作,有需要了解的同学可参考一下 实例1 循环while一个个读取 代码如下 复制代码 ALTER FU ...

  2. swift 时间选择器第三方。公历转农历,农历转公历。

    DFDatePicker. 使用swift5 *支持公元后的任意年的公历和农历,以及公历转农历,农历转公历. *支持农历闰月 *支持年月日时分秒,以及自由组合 *支持选中定位 *轻量化,共一个swif ...

  3. c# 调用Google查询天气 手机所属地 农历转换公历

    红色字替换您需要的信息. //获取最近三天天气情况         string url = string.Format("http://www.google.cn/search?hl=zh ...

  4. 年月日时天干地支推算(农历、公历)

    八字分四柱,每柱2字,分别对应年.月.日.时 一.天干,地支 /*** 天干**/ public enum TianGan {甲(1, "甲"), 乙(2,"乙" ...

  5. python下的一个好用的日历库,支持农历和公历互转,四柱反查等功能

    一般的日历库是顶多支持1800年到2200年,但是sxtwl支持BC722到9999年之间的所有日期. 如果有需要做古人八字,祖先八字.考古日历参考, 古代的农历阳历转换 这些需要的,强烈推荐.下面是 ...

  6. c语言万年历农历转公历,公历日期与农历日期的相互转换程序

    公历日期与农历日期的相互转换程序 //********************************** // 公历日期与农历日期的相互转换程序 // 公元1800年1月25日-2101年1月28日 ...

  7. iOS 开发中农历与公历的转换,星座计算。

    上一个项目开发中遇到的需求,用户选择出生日期后自动计算出对应的农历.用到这种工具类,必定百度谷歌.结果翻了个遍没看到靠谱的,基本都是用的iOS自带的农历算法然后抄个遍.但是这个算法有点小误差,而且农历 ...

  8. 使用Java探索下农历和公历,哈哈,还有我生日,和国庆节假日

    记得去年国庆节立的flag,希望多写写文章的,可是自己太懒了,遇到的问题待解决之后就再也没心思写文章记录下了.从去年到现在也就16篇文章,确实是输出太少了,有时候遇到同样的问题时仍然需要花一些时间查资 ...

  9. Unity农历和公历相互转换

    目录 前言 农历转公历 公历转农历 前言 Unity农历和公历相互转换,使用 System.Globalization.ChineseLunisolarCalendar 实现,但是需要注意的是在.NE ...

最新文章

  1. UIAlertview改变按钮位置 大小
  2. 【转】【MySQL】运行原理(四):重做日志(redo log),回滚日志(undo log),二进制日志(binlog)
  3. 请给出linux中查看系统已经登录用户的命令?
  4. oracle 错误码1438,一次ora-01438错误的处理
  5. mysql函数与事件_mysql事件函数的应用
  6. 剑指Offer——重建二叉树
  7. 机器学习重塑供应链管理的10个途径
  8. IE兼容性问题web.config设置
  9. php本地文件包含 截断,php本地文件包含远程文件包含
  10. 金橙子激光打标机的二次开发(C#)
  11. STM8 捕获模式HS0038 红外遥控解码
  12. 云闪付华为P9指纹_华为云闪付app下载-华为云闪付 安卓版v9.0.11.301-PC6安卓网
  13. unity 世界坐标间角度_Unity 世界坐标局部坐标下的旋转
  14. java 其他文件转pdf_java 其他文件转成pdf java生成pdf
  15. 用stream流来遍历处理list,筛选出符合条件的list
  16. 前端常用的一些插件、UI框架、js库,样式库以及官方文档。
  17. 抖音实战~实现App端视频上传、发布、落库
  18. 51单片机mq3酒精浓度检测mq3酒驾醉驾检测酒精报警ADC0832采集
  19. 注意 怎么选择车险附加险?避免“这也不赔那也不赔”
  20. [css] css 3d 动画,跟随鼠标移动做球形旋转

热门文章

  1. 【日志】20220414
  2. TCP传输连接--建立连接阶段(TCP三次握手)
  3. Redux 入门教程,应用的状态管理器
  4. Notepad++又作死,国产文本编辑器Notepad--发布,支持Win/Linux/Mac平台
  5. BHex宣布完成1500万美元天使轮融资
  6. 一起来“泡博”[--老沙]
  7. WPS Word表格转成文字或文字制成表格的快捷方法
  8. 我是这样成为年薪30万的前端!
  9. 8年程序猿告诉你程序员能赚大钱么?
  10. 遇到糟心的事情-debug时总提示Source not found.