【发布时间】: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