Oracle 闰年的两个月
当我找到11年2月28日至12年2月29日之间的月份时,oracle函数中的months_返回12。实际上应该是12.096。此函数不适用于闰年 2011年2月28日至2012年2月29日期间,为1年(12个月)零1天Oracle 闰年的两个月,oracle,date-arithmetic,Oracle,Date Arithmetic,当我找到11年2月28日至12年2月29日之间的月份时,oracle函数中的months_返回12。实际上应该是12.096。此函数不适用于闰年 2011年2月28日至2012年2月29日期间,为1年(12个月)零1天 select months_between('28-FEB-12', '28-FEB-11') from dual; -- 12 **select months_between('29-FEB-12', '28-FEB-11') from dual; --
select months_between('28-FEB-12', '28-FEB-11') from dual; -- 12
**select months_between('29-FEB-12', '28-FEB-11') from dual; -- 12**
select months_between('28-FEB-12', '27-FEB-11') from dual; -- 12.0322
select months_between('27-FEB-12', '28-FEB-11') from dual; -- 11.9677
这是甲骨文的错误吗
-Vishwa来自:
返回之间的月数日期1和日期2之间的月数。如果date1晚于date2,则结果为正。如果date1早于date2,则结果为负数。如果date1和date2是一个月的同一天,或者是两个月的最后几天,那么结果总是一个整数。否则,Oracle数据库将根据每月31天计算结果的分数部分,并考虑时间组件date1和date2的差异
所以它遵循记录的行为。这不是你所期望的 来自:
返回之间的月数日期1和日期2之间的月数。如果date1晚于date2,则结果为正。如果date1早于date2,则结果为负数。如果date1和date2是一个月的同一天,或者是两个月的最后几天,那么结果总是一个整数。否则,Oracle数据库将根据每月31天计算结果的分数部分,并考虑时间组件date1和date2的差异
所以它遵循记录的行为。这不是你所期望的 这不是一个bug,因为甲骨文这么说,这是一个逻辑错误,是由人驱动的(并且记录为正确的东西),这更糟糕 如果1月和2月的最后几天之间的差值正好是1个月(29个确切的天数),这是怎么回事。请参阅下文:
MONTHS_BETWEEN('29-FEB-12','31-JAN-12')
1
MONTHS_BETWEEN('29-FEB-12','30-JAN-12')
.967741935
如果多出一天(30天),则月差小于1。请参阅下文:
MONTHS_BETWEEN('29-FEB-12','31-JAN-12')
1
MONTHS_BETWEEN('29-FEB-12','30-JAN-12')
.967741935
错。那一点也不严格
另一方面,SQL Server可以正确处理此问题:
select DATEDIFF(MM,'29-FEB-12','30-JAN-12')
select DATEDIFF(MM,'29-FEB-12','31-JAN-12')
两者都是1这不是一个bug,因为ORACLE这么说,这是一个由人驱动的逻辑错误(并且记录为正确的东西),更糟糕的是 如果1月和2月的最后几天之间的差值正好是1个月(29个确切的天数),这是怎么回事。请参阅下文:
MONTHS_BETWEEN('29-FEB-12','31-JAN-12')
1
MONTHS_BETWEEN('29-FEB-12','30-JAN-12')
.967741935
如果多出一天(30天),则月差小于1。请参阅下文:
MONTHS_BETWEEN('29-FEB-12','31-JAN-12')
1
MONTHS_BETWEEN('29-FEB-12','30-JAN-12')
.967741935
错。那一点也不严格
另一方面,SQL Server可以正确处理此问题:
select DATEDIFF(MM,'29-FEB-12','30-JAN-12')
select DATEDIFF(MM,'29-FEB-12','31-JAN-12')
两者都是1换句话说,
月间隔('2012年4月30日,'2012年7月31日')
当然是3
。换句话说,月间隔('2012年4月30日,'2012年7月31日')
当然是3
。你可以通过阅读文档轻松回答这个问题。Oracle的文档是在线、全面和免费的。你应该学会如何使用它。通过阅读文档,您可以轻松地自己回答这个问题。Oracle的文档是在线、全面和免费的。你应该学会如何使用它。SQL Server很可能得到相同的值,只是四舍五入到一个整数。SQL Server很可能得到相同的值,只是四舍五入到一个整数。