W bazie danych Oracle ADD_MONTHS()
funkcja dodaje do daty podaną liczbę miesięcy i zwraca wynik.
Składnia
Składnia wygląda tak:
ADD_MONTHS(date, integer)
Gdzie date
może być wartością daty i godziny lub dowolną wartością, która może być niejawnie przekonwertowana na DATE
.
integer
argument może być liczbą całkowitą lub dowolną wartością, która może być niejawnie przekonwertowana na liczbę całkowitą.
Zwracany typ to zawsze DATE
, niezależnie od typu danych date
.
Przykład
Oto przykład:
SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL;
Wynik:
01/APR/20
Ten przykład wyświetla datę na podstawie wartości NLS_DATE_FORMAT
mojego systemu parametr (którym obecnie jest DD/MON/RR
). Możemy zmienić ten parametr lub użyć funkcji takiej jak TO_CHAR()
aby zwrócić wynik w innym formacie.
Przykład:
SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL;
Wynik:
2020-04-01
Odejmij miesiące
Aby odjąć miesiące od daty, użyj wartości ujemnej dla drugiego argumentu.
Przykład:
SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL;
Wynik:
01/OCT/19
Przekazywanie różnych formatów dat
Data może być podana w różnych formatach, o ile odpowiada dacie:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Wynik:
01/APR/20
Ale przekazanie takiego, którego nie można rozwiązać, skutkuje błędem:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Wynik:
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
Może to jednak zależeć od wartości NLS_DATE_FORMAT
parametr. Jeśli zmienimy ten parametr:
ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
Wynik:
VALUE ____________ Mon DD RR
A następnie ponownie uruchom zapytanie:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Wynik:
Apr 01 20
Nie otrzymujemy już błędu.
Argumenty zerowe
Przekazywanie daty null
zwraca null
:
SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL;
Wynik:
null
Ale przekazanie null dla drugiego argumentu skutkuje błędem:
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL;
Wynik:
Error starting at line : 1 in command - SELECT ADD_MONTHS('2020-01-01', null) FROM DUAL Error report - ORA-01843: not a valid month
Zauważ, że domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. W powyższym przykładzie określiłem, że ciąg null
należy zwrócić.
Nieprawidłowa liczba argumentów
Przekazanie nieprawidłowej liczby argumentów skutkuje błędem:
SELECT ADD_MONTHS(3)
FROM DUAL;
Wynik:
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: