gpt4 book ai didi

oracle函数,如excel中的days360

转载 作者:行者123 更新时间:2023-12-04 21:41:59 25 4
gpt4 key购买 nike

是否有任何 oracle 函数可以返回两个日期之间的天数,例如 excel 中的 days360 函数?

DAYS360:
“基于 360 天一年(十二个 30 天的月份)返回两个日期之间的天数,这在某些会计计算中使用。如果您的会计系统基于十二个 30 天,请使用此函数来帮助计算付款个月。

如果开始日期是一个月的最后一天,则等于同月的 30 日。如果结束日期是一个月的最后一天,并且开始日期早于一个月的 30 号,则结束日期等于下个月的 1 号;否则结束日期等于同月的 30 日。”

最佳答案

在 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>

编辑

"in days360 function it returns 20. in ur code it is 18.10. what i want is a function which should work exactly like days360"



好的,Excel函数 days360()根据十二个三十天的月份计算两个日期之间的差异。没有内置的 Oracle 可以执行此操作。 Phil Singer 编写了他自己的 PL/SQL 实现: find it here .另请务必阅读 his follow-up piece .当然,Phil 的函数确实给出了您想要的结果:
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>

关于oracle函数,如excel中的days360,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3020208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com