日期:2014-05-18  浏览次数:20490 次

关于网上流行的农历计算方法的质疑?
最近在网上看了【农历】计算方法:
1、建一表,放初始化资料
因为农历的日期,是由天文学家推算出来的,到现在只有到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, '0x04ae0 ',19168
……
CREATE   FUNCTION   fn_GetLunar(@solarDay   DATETIME)        
RETURNS   varchar(10)--datetime    
   
AS        
BEGIN        
    DECLARE   @solData   int        
……
我也测试了,如果在查询分析器里执行   select   dbo.fn_GetLunar(getdate())   答案是2007-04-06,正确的(今天的阳历是2007-5-21),可如果执行select   dbo.fn_GetLunar(2007-5-21),则答案就变成了:1905-05-03,为什么?
还有,我执行了这样一条语句:update   日历   set   农历=dbo.fn_GetLunar(阳历)   ,系统会提示:“从   char   数据类型到   datetime   数据类型的转换导致   datetime   值越界。”
请高手们解答,谢谢!



------解决方案--------------------
select dbo.fn_GetLunar(2007-5-21) -> select dbo.fn_GetLunar( '2007-05-21 ')