【问题标题】:Subtract 2 dates PL/SQL but one of the dates is 0减去 2 个日期 PL/SQL 但其中一个日期是 0
【发布时间】:2016-03-15 11:35:00
【问题描述】:

我正在将一些计算从 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.705 处进行硬核。

标签: sql date plsql oracle11g fortran


【解决方案1】:

在我看来,只使用CASE 语句会更容易。类似的东西:

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

或者,您可以将所有内容都转换为儒略日期,然后使用日期为 01/01/0001 的校正因子进行减法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 2015-05-13
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-08-03
    • 1970-01-01
    相关资源
    最近更新 更多