USE [rossic]
GO
/****** Object: StoredProcedure [dbo].[fn_GetLunar] Script Date: 02/23/2010 15:46:19 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE proc [dbo].[fn_GetLunar]
-- RETURNS datetime
@solarDay DATETIME ,
@OUTPUTDATE DATETIME output
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 @mLeapNum int
DECLARE @bLeap smallint
DECLARE @temp int
DECLARE @YEAR INT
DECLARE @MONTH INT
DECLARE @DAY INT
-- declare @solarDay datetime
--保证传进来的日期是不带时间
SET @solarDay = CONVERT(varchar(10),@solarDay,120)
-- getdate()
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 SolarData 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 SolarData 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
SET @OUTPUTDATE=CAST((CAST(@YEAR AS VARCHAR(4))+'-'+CAST(@MONTH AS VARCHAR(2))+'-'+CAST(@DAY AS VARCHAR(2))) AS DATETIME)
END
相关推荐
OpenCLI入门:让任何网站变成你的命令行工具(超详细版)
最有用的工具,往往是最简单的。 opencli就是这样。 它不会帮你写代码,不会帮你做决策,但它能把200+个平台装进你的命令行。 让你用最简单的方式,获取最丰富的数据。
sql公历转农历
CREATE TABLE SolarData ( yearId int not null primary key, data char(7) not null, dataInt int not null ) go--插入数据 INSERT INTO SolarData SELECT 1900,'0x...
PWM(脉宽调制)技术详解:从基础到应用实践示例
PWM(脉宽调制)技术是嵌入式系统中一项重要的控制技术,通过调节脉冲宽度来实现对模拟设备的精准控制。从LED亮度到电机速度,PWM的应用场景非常广泛。对于嵌入式学习者来说,理解PWM的工作原理、掌握其配置方法,不仅能提升编程能力,还能为更多复杂系统的开发打下坚实的基础。
mysql的yearweek 和 weekofyear函数
1.MySQL 的 YEARWEEK 是获取年份和周数的一个函数,函数形式为YEARWEEK(date[,mode]) 例如 2010-3-14 ,礼拜天 SELECT YEARWEEK('2010-3-14') 返回 11 SELECT YEARWEEK('2010-3-14',1) 返回 10 其中第二个参数是 mode ,具体指的意思如下: Mode First day...
别再用默认参数了!手把手教你用2P2Z补偿网络优化Buck电源的动态性能
本文详细介绍了如何通过2P2Z补偿网络优化Buck电源的动态性能,解决默认参数下的负载阶跃响应问题。从频域分析到元件选型,再到实测验证,手把手教你提升相位裕度,显著降低超调量和稳定时间,适用于DCDC和开关电源设计。
手把手教你学Simulink——基于Simulink的滑模控制器车辆稳定性仿真建模示例
本文详细介绍了基于Simulink的滑模控制器在车辆稳定性控制中的应用。通过建立二自由度车辆动力学模型(含魔术公式轮胎),设计横摆角速度与质心侧偏角滑模控制器,在Simulink中实现直接横摆力矩控制。文章包含完整的建模流程:从参考模型设计、滑模控制器推导(含等效控制和边界层法),到MATLAB参数设定和Simulink模块搭建。通过双移线测试和路面突变场景验证,证明该控制器能在低附着路面(μ=0.3)将横摆角速度误差控制在±5%以内,显著提升车辆稳定性。同时提供了工程实践要点和扩展方向(如高阶滑模、自适应
SQL 日期转换(阳历转阴历)
--步骤:创建日期表,放初始放初始化资料 --因为农历的日,是由天文学家推算出来,到现在只有到年,以后的有了还可以加入! if object_id('SolarData') is not nulldrop table SolarDatagocreate table SolarData ( yearid int not null, data char(7) not null, data...
工程师必收藏,Juniper(Junos)网络设备命令大全
不要直接删除配置 → 使用deactivate配置前先修改大配置用出现风险命令一律用写自动化时一律用格式真正会用 Juniper 的工程师,不是命令多,而是命令用得精。
oracle阴历转阳历换算,用sql语句实现阳历与农历转换
用sql语句实现阳历与农历转换1.建一张表 存放数据 在下面SQL函数中有用到create table solardata(yearid int not null,data char(7) not null,dataint int not null)--插入数据insert intosolardata select 1900,'0x04bd8',19416 union...
【系统架构设计师】论文:论虚拟现实技术的应用与发展
虚拟现实技术是当前科学研究的热点,同时也是国家大力支持发展的核心技术之一。所谓虚拟现实,就是通过计算机等虚拟手段来构造一个非常接近真实世界的虚拟环境,它主要体现在视觉、触觉、嗅觉等方面的逼真模拟来达到高度的沉浸性,也就是如我们通常所说的“身临其境”。
ARM功耗管理软件之DVFS&AVS
思考:功耗管理软件栈及示例?WFI&WFE?时钟&电源树?DVFS&AVS?
SQL存储过程--- (阳历转阴历)
<br />先建一表,放初始化资料 因为农历的日期,是由天文学家推算出来的,到现在只有到2049年的,以后的有了还可以加入! CREATE TABLE SolarData ( yearId int not null, data char(7) not null, dataInt int not null ) --插入数据 INSERT INTO SolarData SELECT 1900,'0x04bd8',19416 UNION ALL SELECT 1901
RU DOS版、EFI版32bit/64bit BIOS常用工具
DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。
SQL server 假日时间处理
自定义函数: 1,去掉周末(六,日): create function funtime(@BegTime datetime, @EndTime datetime) returns int as begin declare @re int set @re=0 while @BegTime <=@EndTime begin select @re=@re+1 where (datepart(w...
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
mysql将公历农历转换_SQL 日期转换(阳历转阴历)
set @month=@i --确定农历日结束 set @day=ltrim(@offset)--输出日期set @chinesenum=N'〇一二三四五六七八九十' while len(@year)>0select @outputdate=isnull(@outputdate,'')+ substring(@chinesenum,left(@year,1)+1,1), @...
Devexpress16.2.6破解工具
Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具
【农历】计算方法--- (阳历转阴历)…
先建一表,放初始化资料 因为农历的日期,是由天文学家推算出来的,到现在只有到2049年的,以后的有了还可以加入! CREATE TABLE SolarData ( yearId int not null, data char(7) not null, dataInt int not null ) --插入数据 INSERT INTO SolarData SELECT 190
实现阳历转阴历的方法
今天突然想起如何转换日历的事,就上CNBLOGS查了下 找到了一篇文章 【农历】计算方法--- (阳历转阴历) http://www.cnblogs.com/zhangzs8896/archive/2004/10... 甚是感叹 摘过来 备用 CREATE TABLE SolarData( yearId int not null, data char(7) not nul...
oracle阴历解决方案
1、新建年份编码表 /将日期转换成农历的表/ CREATE TABLE SolarData ( YearID INTEGER NOT NULL, -- 农历表 DATA CHAR(7) NOT NULL, -- 农历年对应的16进制数 DataInt INTEGER NOT NULL -- 农历年对应的10进制数 ); 2、为年份编码表插入数据 INSERT INTO SolarData VALUES(1900, '0x04bd8', 19416); INSERT INTO SolarData VALUE
CLR实现阴历阳历转换
CLR实现阴历阳历转换
SQL Server公历转农历函数
--创建农历日期函数 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
阳历转阴历
因为农历的日期,是由天文学家推算出来的,到现在只有到2049年的,以后的有了还可以加入!CREATE TABLE SolarData(yearId int not null,data char(7) not null,dataInt int not null)--插入数据INSERT INTO SolarData SELECT 1900,0x04bd8,19416 UNION ALL SEL
阴历阳历SQL转换
CREATE TABLE SolarData ( yearId int not null, data char(7) not null, dataInt int not null ) --插入数据 INSERT INTO SolarData SELECT 1900,0x04bd8,19416 UNION ALL
C#实现阳历转阴历的方法
CREATE TABLE SolarData( yearId int not null, data char(7) not null, dataInt int not null)--插入数据INSERT INTO SolarData SELECT 1900,0x04bd8,19416 UNION ALL SELECT 1901,0x04
Oracle 阳历转农历
CREATE TABLE SolarData ( YearID INTEGER NOT NULL, -- 农历年 DATA CHAR(7) NOT NULL, -- 农历年对应的16进制数 DataInt INTEGER NOT NULL --
2089



被折叠的 条评论
为什么被折叠?



