【发布时间】:2023-04-10 15:51:02
【问题描述】:
早上好, 我编写了以下查询来获取存储在两个不同表中的日期列 (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 个月...
谁能帮我找出问题所在? 提前谢谢你
【问题讨论】:
-
因为结果是
3.xxx月,而您使用的是floor。尝试使用round而不是floor。 -
或者在计算差异之前可能会截断这两个值,因此您正在比较每个月的第一天;但这取决于您应该应用什么逻辑。
-
感谢您的解释。是的,我实际上想要月差,而不管一个月中的具体哪一天。因此,在比较之前截断两个日期应该可行。我正在尝试写它