Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 闰年的两个月_Oracle_Date Arithmetic - Fatal编程技术网

Oracle 闰年的两个月

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

当我找到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; -- 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很可能得到相同的值,只是四舍五入到一个整数。