Oracle的months_between(date1,date2)函式注意點
select months_between(to_date('2011-4-28','yyyy-MM-dd'),to_date('2011-2-28','yyyy-MM-dd'))
from dual;
MONTHS_BETWEEN(TO_DATE('2011-4
------------------------------
2
select months_between(to_date('2011-4-29','yyyy-MM-dd'),to_date('2011-2-28','yyyy-MM-dd'))
from dual;
MONTHS_BETWEEN(TO_DATE('2011-4
------------------------------
2.03225806451613
select months_between(to_date('2011-4-30','yyyy-MM-dd'),to_date('2011-2-28','yyyy-MM-dd'))
from dual;
MONTHS_BETWEEN(TO_DATE('2011-4
------------------------------
2
2011-4-30日期大於2011-4-29,按理說第三個結果應該大於第二個結果,但是結果卻是相反的。
後來查閱了oracle的官方文件,是這樣解釋的:(小數部分是按照一個月31天計算的)
MONTHS_BETWEEN returns number of months between dates date1 and date2. If date1 is later than date2, then the result is positive. If date1 is earlier than date2, then the result is negative. If date1 and date2 are either the same days of the month or both last days of months, then the result is always an integer. Otherwise Oracle Database calculates the fractional portion of the result based on a 31-day month and considers the difference in time components date1 and date2.
select 1/31 from dual;
1/31
----------
0.03225806
from dual;
MONTHS_BETWEEN(TO_DATE('2011-4
------------------------------
2
select months_between(to_date('2011-4-29','yyyy-MM-dd'),to_date('2011-2-28','yyyy-MM-dd'))
from dual;
MONTHS_BETWEEN(TO_DATE('2011-4
------------------------------
2.03225806451613
select months_between(to_date('2011-4-30','yyyy-MM-dd'),to_date('2011-2-28','yyyy-MM-dd'))
from dual;
MONTHS_BETWEEN(TO_DATE('2011-4
------------------------------
2
2011-4-30日期大於2011-4-29,按理說第三個結果應該大於第二個結果,但是結果卻是相反的。
後來查閱了oracle的官方文件,是這樣解釋的:(小數部分是按照一個月31天計算的)
MONTHS_BETWEEN returns number of months between dates date1 and date2. If date1 is later than date2, then the result is positive. If date1 is earlier than date2, then the result is negative. If date1 and date2 are either the same days of the month or both last days of months, then the result is always an integer. Otherwise Oracle Database calculates the fractional portion of the result based on a 31-day month and considers the difference in time components date1 and date2.
select 1/31 from dual;
1/31
----------
0.03225806
這樣就能解釋了。
相關文章
- 【Oracle SQL】months_between與trunc函式OracleSQL函式
- python裝飾器管理函式和類的注意點Python函式
- GO 的匿名函式使用注意Go函式
- oracle 函式Oracle函式
- oracle or 函式Oracle函式
- 函式注意事項函式
- 【Oracle的NVL函式用法】Oracle函式
- Oracle常用函式Oracle函式
- 7 Oracle 函式Oracle函式
- Oracle 字串函式Oracle字串函式
- Oracle 字串函式Oracle字串函式
- Oracle分析函式與視窗函式Oracle函式
- Oracle中Decode()函式的使用Oracle函式
- oracle interval日期函式的bug!Oracle函式
- Oracle的LAST_DAY函式OracleAST函式
- Oracle OCP(03):字元函式、數字函式和日期函式Oracle字元函式
- Oracle函式彙總Oracle函式
- Oracle 隨機函式Oracle隨機函式
- Oracle 自定義函式Oracle函式
- oracle 高階函式Oracle函式
- oracle json 解析函式OracleJSON函式
- oracle資料庫常用分析函式與聚合函式的用法Oracle資料庫函式
- 6、Oracle中的分組函式Oracle函式
- Oracle的SYS_CONNECT_BY_PATH函式Oracle函式
- oracle 10g函式大全–日期型函式Oracle 10g函式
- Ignite自定義函式注意事項函式
- Oracle函式入坑指南Oracle函式
- oracle常用函式介紹Oracle函式
- Oracle OCP(04):聚合函式Oracle函式
- oracle函式手冊(轉)Oracle函式
- 【知識點】inline函式、回撥函式、普通函式inline函式
- Oracle分析函式之開窗函式over()詳解Oracle函式
- 3.0 ORACLE移植到MYSQL改造注意要點OracleMySql
- Oracle中的正規表示式(及函式)詳解Oracle函式
- Power Apps SortByColumns 函式使用注意事項APP函式
- 【函式】Oracle12c 列轉行函式使用listagg函式Oracle
- 詳解箭頭函式和普通函式的區別以及箭頭函式的注意事項、不適用場景函式
- 工作中,Oracle常用函式Oracle函式
- Oracle中pivot函式詳解Oracle函式