2015-12-10 131 views
2

我将一些计算从FORTRAN转换为PL/SQL。 请让我解释一下:减去2日期PL/SQL但日期之一是0

在我的Oracle数据库表中,我有两个属性的以下日期值。

attribute1: '01/01/0001', This is a date not a string. 
attribute2: '08/24/1918', This is a date not a string. 

我所试图做的是,如果ATTRIBUTE1等于01/01/0001' ,然后将其转换成00/00/0000再减去attribute2就像下面的代码:

//Decode missing for '01/01/0001' 
select round((to_date('01/01/0001', 'mm/dd/yyyy') - to_date('01/24/1918', 'mm/dd/yyyy'))/365.25, 3)as dt from dual; 

FORTRAN代码正在做的是将'01/01/0001'转换为'0/0/0',然后进行减号操作。像这样,

round((('0/ 0/ 0' - '08/24/1918')/365.25), 3). Round to the 3 decimal place. 

我知道我错过了在PL/SQL代码解码上述转换'01/01/0001,基本上为零。

运行PL/SQL代码,您将得到-1917.027的值。 FORTRAN代码返回值为-1918.732。 PL/SQL代码关闭一天,一个月和一年。

如何将'01/01/0001'转换为零,然后减去一个日期?

请帮忙,并提前致谢。

+0

也许只是创建函数减去两个日期硬核-1.705。 – dcieslak

回答

1

对我而言,使用CASE声明会更容易。喜欢的东西:

CASE 
    WHEN attribute1 = '01/01/0001' THEN -1*(EXTRACT(YYYY FROM attribute2)+ EXTRACT(DDD FROM attribute2)/365) 
    ELSE attribute1 - attribute2 
END 

或者,你可以只是转换一切Julian日期,然后做减法用修正系数的日期为01/01/0001