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: