mysql将公历农历转换_SQL农历转换函数(显示中文格式,加入润月的显示)
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农历转换函数(显示中文格式,加入润月的显示)相关推荐
- mysql对所有id求积_sql 行列式 转换,
参考:http://www.cnblogs.com/lhj588/p/3315876.html SELECT Date , MAX(CASE NAME WHEN '小说' THEN Scount EL ...
- mysql sql 列变成横向_SQL 统计 字段 竖向转横向 (行转列)显示
在做一些SQL统计时,为了更直观看到结果,并进行比较,需要把竖向表的部分统计字段转成横向显示. 原数据格式: wbname newstime ---------------------- ...
- autoit3转换php,AutoIt3 脚本函数用法中文说明
AutoIt3 脚本函数用法中文说明 系统环境变量类 EnvUpdate ( ) ;更新环境变量 EnvGet ( "变量名称" ) ;取环境变量 ClipGet ( ) ;取剪辑 ...
- java币值转换_币值转换
币值转换 输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式.如23108元,转换后变成"贰万叁仟壹百零捌"元.为了简化输出,用小写英文字母 ...
- php 当前时间转换成农历,php如何实现公、农历日期的想互转换的实例
这篇文章主要介绍了PHP 实现公历日期与农历日期的互转换的相关资料,希望通过本文大家能帮助到大家,需要的朋友可以参考下 PHP 实现公历日期与农历日期的互转换 前言: 今天根据客户的需求对时间进行了转 ...
- java 当前时间 转换成 农历(阴历)时间
package util;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Ca ...
- sql中农历阳历之间的转换问题
本文来自tony的完善版.链接地址为: http://topic.csdn.net/u/20100424/07/29529d9d-bc54-4877-b198-4426b4d85024.html 呵呵 ...
- 单片机 DS1302 公历年月日 换算出星期、农历月份、农历日期 判断闰年
传入格式:2020年,12月,12日. 返回1到7 代表星期一到星期天 /** 由年月日获取星期 https://www.cnblogs.com/fengbohello/p/3264300.html* ...
- 根据公历日期获取到农历日期信息(带星座)(C#)
直接上码,都有注释说明 using System; using System.Collections.Generic; using System.Globalization; using System ...
- mysql sqlite转换_数据库转换工具(SqliteToMysql)
SqliteToMysql是一款用于SQLITE和MYSQL之间的数据库转换工具.它能够将SQLITE数据转换成MYSQL数据库,让用户自主配置转换条件,满足用户的数据库格式需要.. 相关软件软件大小 ...
最新文章
- 在Cuda上部署量化模型
- 入门深度学习,但你知道哪些情况下不该使用深度学习吗?
- python wait之后怎么起起来_python wait方法_Python条件类| 带有示例的wait()方法
- java8中的函数式数据处理
- MaxCompute安全管理指南-基础篇
- SimpleMembership
- android中活动的启动模式
- 百度SEO快克工具包 1.5.0 官方版
- 关于Cocoa框架的争论
- python 删除断点_给python 初学者的四条忠告,减少一些没必要的麻烦
- (宏)Word 纯文本粘贴
- 赵立新主持机器人_赵立新配音为何这么牛 看看他的人生经历你就知道了
- (转)Steve Cohen:重出江湖?(上)
- 计算机操作系统 第五版 答案,操作系统-第5版-习题答案.doc
- 利用JS代码完成动态生成表格案例及解析
- ui-grid 常用操作
- Html 中的特殊符号表示
- java inflate deflate_Java中的可迭代gzip deflate / inflate
- 权重推送 产品定位 直通车投放 关键词 直通车人群 创意标题 补单 新手上路,直通车烧钱没效果怎么办?
- android APP UI设计图标注、换算