我想获得DT_1
和DT_2
之间的整月差额。我尝试了datediff
,datepart
和month
,但是没有用...我使用SQL Developer,它显示:
ORA-00904:“ DATEPART”:无效的标识符 00904. 00000-“%s:无效的标识符”
数据:
+---------+-----------+---------------+ | ID | DT_1 | DT_2 | +---------+-----------+---------------+ | C111111 | 2018/1/1 | 2018/1/1 | | C111112 | 2017/9/30 | 2018/10/25 | | C111113 | 2018/10/1 | 2018/10/31 | | C111114 | 2018/10/6 | 2018/12/14 | +---------+-----------+---------------+
预期结果:
C111111
,月份差应为0
(1-1
)C111112
,月份差应为13
(22-9
)C111113
,月份差应为0
(10-10
)C111114
,月份差应为2
(12-10
)有人可以帮忙吗?谢谢。
答案 0 :(得分:4)
您可能需要查看DT_1和DT_2是否为日期类型,然后使用MONTHS_BETWEEN函数获取两个日期之间月份的日期差。如下所示:
SELECT MONTHS_BETWEEN (TO_DATE('2018/1/1','YYYY/MM/DD'), TO_DATE('2018/1/1','YYYY/MM/DD') ) "Months" FROM DUAL;
OR
SELECT MONTHS_BETWEEN (TO_DATE(DT_1,'YYYY/MM/DD'), TO_DATE(DT_2,'YYYY/MM/DD') ) "Months" FROM TableName;
答案 1 :(得分:0)
您要计算两个值之间的月份边界数。这不是months_between()
所做的。取而代之的是,将这些值转换为自某个时间点以来的月数,然后求出差。
使用算术的简单方法:
select t.*,
( (extract(year from dt_2) * 12 + extract(month from dt_2)) -
(extract(year from dt_1) * 12 + extract(month from dt_1))
) as month_difference
from t;
或者,您可以将trunc()
与months_between()
一起使用:
select t.*,
months_between(trunc(dt_2, 'MON'), trunc(dt_1, 'MON'))