Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ADD_MONTHS()-Funktion in Oracle

In der Oracle-Datenbank die ADD_MONTHS() Funktion addiert eine bestimmte Anzahl von Monaten zu einem Datum und gibt das Ergebnis zurück.

Syntax

Die Syntax lautet wie folgt:

ADD_MONTHS(date, integer)

Wobei date kann ein datetime-Wert oder ein beliebiger Wert sein, der implizit in DATE konvertiert werden kann .

Die integer Argument kann eine Ganzzahl oder ein beliebiger Wert sein, der implizit in eine Ganzzahl umgewandelt werden kann.

Der Rückgabetyp ist immer DATE , unabhängig vom Datentyp von date .

Beispiel

Hier ist ein Beispiel:

SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL;

Ergebnis:

01/APR/20

Dieses Beispiel zeigt das Datum basierend auf dem Wert von NLS_DATE_FORMAT meines Systems an -Parameter (derzeit DD/MON/RR ). Wir können diesen Parameter entweder ändern oder eine Funktion wie TO_CHAR() verwenden um das Ergebnis in einem anderen Format zurückzugeben.

Beispiel:

SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL;

Ergebnis:

2020-04-01

Subtrahieren Sie Monate

Um Monate von einem Datum abzuziehen, verwenden Sie einen negativen Wert für das zweite Argument.

Beispiel:

SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL;

Ergebnis:

01/OCT/19

Verschiedene Datumsformate übergeben

Das Datum kann in verschiedenen Formaten bereitgestellt werden, solange es in ein Datum aufgelöst wird:

SELECT ADD_MONTHS('01 Jan 2020', 3)
FROM DUAL;

Ergebnis:

01/APR/20

Aber das Übergeben einer, die nicht aufgelöst werden kann, führt zu einem Fehler:

SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;

Ergebnis:

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

Dies kann jedoch vom Wert des NLS_DATE_FORMAT abhängen Parameter. Wenn wir diesen Parameter ändern:

ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';

Ergebnis:

       VALUE 
____________ 
Mon DD RR   

Führen Sie dann die Abfrage erneut aus:

SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;

Ergebnis:

Apr 01 20

Der Fehler wird nicht mehr angezeigt.

Null-Argumente

Übergeben eines Datums von null gibt null zurück :

SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL;

Ergebnis:

null

Aber das Übergeben von null für das zweite Argument führt zu einem Fehler:

SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL;

Ergebnis:

Error starting at line : 1 in command -
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL
Error report -
ORA-01843: not a valid month

Beachten Sie, dass SQLcl und SQL*Plus standardmäßig immer dann ein Leerzeichen zurückgeben, wenn null tritt als Ergebnis eines SQL SELECT auf Erklärung.

Sie können jedoch SET NULL verwenden um eine andere Zeichenfolge anzugeben, die zurückgegeben werden soll. Im obigen Beispiel habe ich angegeben, dass die Zeichenfolge null zurückgegeben werden soll.

Ungültige Anzahl von Argumenten

Das Übergeben einer ungültigen Anzahl von Argumenten führt zu einem Fehler:

SELECT ADD_MONTHS(3)
FROM DUAL;

Ergebnis:

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: