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: