Oracle Databaseでは、MONTHS_BETWEEN()
関数は、2つの日付の間の月数を返します。
構文
構文は次のようになります:
MONTHS_BETWEEN(date1, date2)
例
次に例を示します:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;
結果:
4
この場合、2つの日付の間にはちょうど4か月あります。
月と月の最終日は、セッションパラメータNLS_CALENDAR
によって定義されます。 。セッションで使用されているカレンダーを確認するには、「NLSパラメーターの値を確認する方法」を参照してください。鉱山はグレゴリオ暦を使用しています。
フラクショナル月
この関数は、数か月を考慮に入れています。 2つの日付に異なる日の部分が含まれている場合、OracleDatabaseは使用する適切な小数部分を計算します。
例:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;
結果:
3.51612903225806451612903225806451612903
マイナスの月
2番目の日付が最初の日付よりも遅い場合、負の金額が返されます:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;
結果:
-4
範囲外の日付
ゼロの日付やその他の範囲外の日付はエラーになります。
例:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;
結果:
Error starting at line : 1 in command - SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00') FROM DUAL Error at Command Line : 1 Column : 47 Error report - SQL Error: ORA-01841: (full) year must be between -4713 and +9999, and not be 0 01841. 00000 - "(full) year must be between -4713 and +9999, and not be 0" *Cause: Illegal year entered *Action: Input year in the specified range
エラーメッセージに示されているように、(通年の)年は-4713
の間にある必要があります および+9999
、0
ではありません 。
日付と現在の日付の比較
SYSDATE
を渡すことができます 日付を現在の日付と比較する日時引数として:
SELECT
SYSDATE,
MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;
結果:
SYSDATE MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') ____________ ____________________________________________ 13/AUG/21 -102.587825194145758661887694145758661888
引数がありません
MONTHS_BETWEEN()
を呼び出す 引数の数が間違っているか、引数を渡さないと、エラーが発生します:
SELECT MONTHS_BETWEEN()
FROM DUAL;
結果:
Error starting at line : 1 in command - SELECT MONTHS_BETWEEN() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: