在excel中像days360一样的oracle函数

是否有任何oracle函数将返回两个date之间的天数,如excel中days360函数?


第360天:“根据一个360天的年份(12个30天的月份)返回两个date之间的天数,这个天数用于一些会计计算。如果您的会计系统基于十二个30 – 日子。

如果开始date是一个月的最后一天,则等于当月的第30天。 如果结束date是一个月的最后一天,并且开始date早于一个月的30日,则结束date等于下个月的第一天; 否则结束date等于同一个月的三十日。“

在Oracle中我们可以对date进行简单的算术运算。 或者,我们可以将差异转换为INTERVAL数据types:

SQL> select id 2 , start_date 3 , end_date 4 , (end_date - start_date) as arith_diff 5 , (end_date - start_date) DAY TO SECOND as ds_interval 6 from t42 7 / ID START_DATE END_DATE ARITH_DIFF DS_INTERVAL ------ -------------------- -------------------- ---------- -------------------- 111 11-FEB-2010 05:44:52 01-MAR-2010 08:10:18 18.1009954 +18 02:25:26.000000 222 15-APR-2010 10:50:46 19-MAY-2010 01:44:08 33.6203935 +33 14:53:22.000000 333 01-JUN-2010 00:00:00 31-AUG-2010 00:00:00 91 +91 00:00:00.000000 444 11-FEB-2010 00:00:00 01-MAR-2010 00:00:00 18 +18 00:00:00.000000 SQL> 

编辑

“在days360函数返回20.在我的代码是18.10。我想要的是一个函数应该完全像days360”

好的,Excel函数days360()计算两个date之间的差异,基于十二个三十几个月的一年。 这里没有内置的Oracle。 Phil Singer已经写了他自己的PL / SQL实现: 在这里find它 。 另外请务必阅读他的后续作品 。 菲尔的function肯定会给你想要的结果:

 SQL> select id 2 , start_date 3 , end_date 4 , days360(start_date, end_date) as days360 5 from t42 6 / ID START_DATE END_DATE DAYS360 ---------- -------------------- -------------------- ---------- 111 11-FEB-2010 05:44:52 01-MAR-2010 08:10:18 20 222 15-APR-2010 10:50:46 19-MAY-2010 01:44:08 34 333 01-JUN-2010 00:00:00 31-AUG-2010 00:00:00 90 444 11-FEB-2010 00:00:00 01-MAR-2010 00:00:00 20 SQL>