是否有任何oracle函数会返回两个日期之间的天数,例如excel中的days360函数?
DAYS360: “返回基于360天年份(12个30天月份)的两个日期之间的天数,用于某些会计计算。如果您的会计系统基于12天30天,请使用此功能帮助计算付款个月。
如果开始日期是一个月的最后一天,它将等于同月的第30天。如果结束日期是一个月的最后一天,并且开始日期早于一个月的30日,则结束日期将等于下个月的第一天;否则结束日期将等于同月的30日。“
答案 0 :(得分:4)
在Oracle中,我们可以对日期进行简单的算术运算。或者,我们可以将差异转换为INTERVAL数据类型:
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. in 你的代码是18.10。我想要的是一个 应该完全正常工作的功能 像days360“
好的,Excel函数days360()
根据十二三十天的一年计算两个日期之间的差异。没有Oracle内置功能可以做到这一点。 Phil Singer编写了自己的PL / SQL实现:find it here。另请务必阅读his follow-up piece。当然菲尔的功能确实给你想要的结果:
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>