Oracle Databaseでは、ADD_MONTHS()
関数は、指定された月数を日付に追加し、結果を返します。
構文
構文は次のようになります:
ADD_MONTHS(date, integer)
date
日時の値、または暗黙的にDATE
に変換できる任意の値を指定できます 。
integer
引数は整数または暗黙的に整数に変換できる任意の値にすることができます。
戻りタイプは常にDATE
です。 、 date
のデータ型に関係なく 。
例
次に例を示します:
SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL;
結果:
01/APR/20
この例では、システムのNLS_DATE_FORMAT
の値に基づいて日付を表示します パラメータ(現在はDD/MON/RR
)。このパラメータを変更するか、TO_CHAR()
のような関数を使用することができます 結果を別の形式で返します。
例:
SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL;
結果:
2020-04-01
月を引く
日付から月を引くには、2番目の引数に負の値を使用します。
例:
SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL;
結果:
01/OCT/19
さまざまな日付形式の受け渡し
日付は、日付に解決される限り、さまざまな形式で提供できます。
SELECT ADD_MONTHS('01 Jan 2020', 3)
FROM DUAL;
結果:
01/APR/20
ただし、解決できないものを渡すと、エラーが発生します:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
結果:
Error starting at line : 1 in command - SELECT ADD_MONTHS('Jan 01 2020', 3) FROM DUAL Error report - ORA-01858: a non-numeric character was found where a numeric was expected
ただし、これはNLS_DATE_FORMAT
の値によって異なります。 パラメータ。このパラメータを変更した場合:
ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
結果:
VALUE ____________ Mon DD RR
次に、クエリを再度実行します:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
結果:
Apr 01 20
エラーは発生しなくなりました。
ヌル引数
null
の日付を渡す null
を返します :
SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL;
結果:
null
ただし、2番目の引数にnullを渡すと、エラーが発生します:
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL;
結果:
Error starting at line : 1 in command - SELECT ADD_MONTHS('2020-01-01', null) FROM DUAL Error report - ORA-01843: not a valid month
デフォルトでは、SQLclとSQL*Plusはnull
の場合は常に空白を返すことに注意してください。 SQL SELECT
の結果として発生します 声明。
ただし、SET NULL
は使用できます 返される別の文字列を指定します。上記の例では、文字列null
を指定しました 返却する必要があります。
引数の数が無効です
無効な数の引数を渡すと、エラーが発生します:
SELECT ADD_MONTHS(3)
FROM DUAL;
結果:
Error starting at line : 1 in command - SELECT ADD_MONTHS(3) 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: