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: