减去2个日期PL / SQL,但其中一个日期为0

时间:2015-12-10 00:26:27

标签: sql date plsql oracle11g fortran

我正在将一些计算从FORTRAN转换为PL / SQL。 请让我解释一下:

在我的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'转换为零,然后将其减去日期??

请提供帮助,并提前致谢。

1 个答案:

答案 0 :(得分: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的修正系数进行减法