Oracle Months Between无法正常工作



早上好,我编写了以下查询,以获取存储在两个不同表中的日期列(STRT_DT(和时间戳列(VLD_FRM_TMS(之间的月份差。我不知道为什么它适用于某些记录,但不适用于其他记录(它少计算一个月(

select ID, floor (months_between (cast(a.VLD_FRM_TMS as date), STRT_DT)) as delta
from TABLE_A a
inner join TABLE_B b
on a.ID = b.ID 

这是一个计算不起作用的记录示例:

VLD_FRM_TMS
-----------
28-FEB-21 12.00.00.000000000 AM
STRT_DT
--------
29-OCT-20

该公式计算3个月而不是4个月…

有人能帮我找出问题吗?提前感谢

这正是文档中描述的行为:

如果date1和date2是一个月的同一天,或者都是几个月的最后一天,则结果始终是一个整数。否则,Oracle数据库将根据31天的月份计算结果的小数部分,并考虑时间分量date1和date2的差异。

(注意:突出显示是我的。(

如果你运行这个代码:

select months_between(date '2021-02-28', date '2020-10-29') as delta
from dual

结果是3.9677。

我怀疑你想要一些其他的逻辑。然而,这个问题并没有具体说明您实际想要什么逻辑。

我实际上想要月份的差异,而不考虑一个月的具体日期。

您可以使用'MM'格式元素将这两个值截断到每月的第一个,然后获得它们之间的差异:

months_between (trunc(a.VLD_FRM_TMS, 'MM'), trunc(STRT_DT, 'MM')) as delta

现在,它将始终是一个整数,即月的整数,因此您不需要截断/取整结果。

db<gt;摆弄旧的计算和这个版本的问题。

相关内容

  • 没有找到相关文章

最新更新