sql农历转换函数(显示中文格式,加入润月的显示)

创建农历日期函数

if object_id('fn_getlunar') is not null

drop function fn_getlunar

go

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

--传回农历年的总天数

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

--判断那个月是润月

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

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<

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'0一二三四五六七八九十'

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,1) end

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,1) end

else

set @outputdate=@outputdate+n'三十'

return @outputdate

end

go

select dbo.fn_getlunar(getdate()) as [改编日期(农历)],

getdate() as [改编日期(公历)]

/*

改编日期(农历) 改编日期(公历)

------------------ -----------------------

二0一0年三月十一 2010-04-24 07:01:17.340

(1 行受影响)

*/

select convert(char(10),dateadd(d,number,'2008-1-1'),23) as 公历,

dbo.fn_getlunar(dateadd(d,number,'2008-1-1')) as 农历

from master..spt_values

where type='p'

/*

公历 农历

---------- ------------------------------

2008-01-01 二00七年十一月廿三

2008-01-02 二00七年十一月廿四

2008-01-03 二00七年十一月廿五

2008-01-04 二00七年十一月廿六

2008-01-05 二00七年十一月廿七

2008-01-06 二00七年十一月廿八

2008-01-07 二00七年十一月廿九

2008-01-08 二00七年十二月初一

2008-01-09 二00七年十二月初二

2008-01-10 二00七年十二月初三

...............

2013-07-31 二0一三年六月廿四

2013-08-01 二0一三年六月廿五

2013-08-02 二0一三年六月廿六

2013-08-03 二0一三年六月廿七

2013-08-04 二0一三年六月廿八

2013-08-05 二0一三年六月廿九

2013-08-06 二0一三年六月三十

2013-08-07 二0一三年七月初一

2013-08-08 二0一三年七月初二

2013-08-09 二0一三年七月初三

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

mysql将公历农历转换_SQL农历转换函数(显示中文格式,加入润月的显示)相关推荐

  1. mysql对所有id求积_sql 行列式 转换,

    参考:http://www.cnblogs.com/lhj588/p/3315876.html SELECT Date , MAX(CASE NAME WHEN '小说' THEN Scount EL ...

  2. mysql sql 列变成横向_SQL 统计 字段 竖向转横向 (行转列)显示

    在做一些SQL统计时,为了更直观看到结果,并进行比较,需要把竖向表的部分统计字段转成横向显示. 原数据格式: wbname        newstime ---------------------- ...

  3. autoit3转换php,AutoIt3 脚本函数用法中文说明

    AutoIt3 脚本函数用法中文说明 系统环境变量类 EnvUpdate ( ) ;更新环境变量 EnvGet ( "变量名称" ) ;取环境变量 ClipGet ( ) ;取剪辑 ...

  4. java币值转换_币值转换

    币值转换 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简化输出,用小写英文字母 ...

  5. php 当前时间转换成农历,php如何实现公、农历日期的想互转换的实例

    这篇文章主要介绍了PHP 实现公历日期与农历日期的互转换的相关资料,希望通过本文大家能帮助到大家,需要的朋友可以参考下 PHP 实现公历日期与农历日期的互转换 前言: 今天根据客户的需求对时间进行了转 ...

  6. java 当前时间 转换成 农历(阴历)时间

    package util;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Ca ...

  7. sql中农历阳历之间的转换问题

    本文来自tony的完善版.链接地址为: http://topic.csdn.net/u/20100424/07/29529d9d-bc54-4877-b198-4426b4d85024.html 呵呵 ...

  8. 单片机 DS1302 公历年月日 换算出星期、农历月份、农历日期 判断闰年

    传入格式:2020年,12月,12日. 返回1到7 代表星期一到星期天 /** 由年月日获取星期 https://www.cnblogs.com/fengbohello/p/3264300.html* ...

  9. 根据公历日期获取到农历日期信息(带星座)(C#)

    直接上码,都有注释说明 using System; using System.Collections.Generic; using System.Globalization; using System ...

  10. mysql sqlite转换_数据库转换工具(SqliteToMysql)

    SqliteToMysql是一款用于SQLITE和MYSQL之间的数据库转换工具.它能够将SQLITE数据转换成MYSQL数据库,让用户自主配置转换条件,满足用户的数据库格式需要.. 相关软件软件大小 ...

最新文章

  1. 在Cuda上部署量化模型
  2. 入门深度学习,但你知道哪些情况下不该使用深度学习吗?
  3. python wait之后怎么起起来_python wait方法_Python条件类| 带有示例的wait()方法
  4. java8中的函数式数据处理
  5. MaxCompute安全管理指南-基础篇
  6. SimpleMembership
  7. android中活动的启动模式
  8. 百度SEO快克工具包 1.5.0 官方版
  9. 关于Cocoa框架的争论
  10. python 删除断点_给python 初学者的四条忠告,减少一些没必要的麻烦
  11. (宏)Word 纯文本粘贴
  12. 赵立新主持机器人_赵立新配音为何这么牛 看看他的人生经历你就知道了
  13. (转)Steve Cohen:重出江湖?(上)
  14. 计算机操作系统 第五版 答案,操作系统-第5版-习题答案.doc
  15. 利用JS代码完成动态生成表格案例及解析
  16. ui-grid 常用操作
  17. Html 中的特殊符号表示
  18. java inflate deflate_Java中的可迭代gzip deflate / inflate
  19. 权重推送 产品定位 直通车投放 关键词 直通车人群 创意标题 补单 新手上路,直通车烧钱没效果怎么办?
  20. android APP UI设计图标注、换算

热门文章

  1. html的nofollow标签,nofollow标签有什么用,网站怎么添加nofollow
  2. 如何安装M26F1 5G路由器
  3. 《生命中不能承受之轻》读书笔记
  4. 如何将多张图片转换为pdf格式
  5. 【百问网】物联网项目学习总结
  6. 第13期 《仰望星空,脚踏实地》 12月刊
  7. t分布f分布与样本均值抽样分布_常用概率分布
  8. 计算机检索策略制定过程,计算机文献检索的基本方法与策略
  9. python打分系统_做一个Python颜值打分系统,比比看杨幂和杨超越到底谁更美?
  10. Oracle 容灾方案选择