2017-07-05 15 views
0

MONTHS_BETWEEN関数を使用して2つの日付の差分を取得していますが、結果は100%正しくはありません。 私はそれが2返す必要があり、この場合には、ここでこのSQLMONTHS_BETWEEN関数で期待される結果が得られません

SELECT MONTHS_BETWEEN(TO_DATE('20170630','YYYYMMDD'), 
    TO_DATE('20170501','YYYYMMDD')) "Months" 
    FROM DUAL; 

を試みたが、結果はそう1.93548387096774 、すべてのヘルプです??または1日以上の日付を追加する方法はありますか?

+0

あなたがこれまでに1より多くの日を追加したい場合は、 'DATEADD(日付要素、数字、日付)を使用することができます" –

+0

は、同様の質問を参照してください:[正しい値を返さない間*月数を*] (https://stackoverflow.com/q/46070595/642706)&[* JavaのORACLE関数MONTHS_BETWEENのアナログ](https://stackoverflow.com/q/9100543/642706) –

答えて

0

は日が異なっていると、彼らは両方のではない月の最終日を指定した場合

SELECT ROUND(MONTHS_BETWEEN(
    TO_DATE('20170630','YYYYMMDD'), 
    TO_DATE('20170501','YYYYMMDD'))) 
"Months" FROM DUAL; 

MONTHS_BETWEEN戻って結果を小数試してみてください。詳細はhttp://www.sqlines.com/oracle/functions/months_between

+0

ITはここでは動作しません –

+0

Oracleエミュレータで動作します。http://sqlfiddle.com/#!4/0d890/3 – VladimirAus

+0

sqlfiddleが動作しますか?試してみるといつも失敗します。かなりそれをあきらめ、Oracleの代わりにこれを使用してください:http://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=ec153e296b0880c80515b8e50471ec0d –

0

月間は、1か月あたりの小数点以下の桁数を示します。したがって、1st Janから1st Febまでは1となります。しかし、1st Janから31st Janまでは、正確には1にはなりません。それは0.9...になります。あなたはあなたが30th June1st Mayから、1st JulyにOR 30th Aprilから30th June1st Mayから

2を取得します。1.

を取得します。同様に31st Janから28th Febに(非閏年)、あなたは正確に2を得ることはありません。

正確に2が必要な場合は、1日を大きい日付に加算するか、start_dateから1日を引いてください。

DBFiddle Demo

関連する問題