Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ADD_MONTHS() Funkcja w Oracle

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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak korzystać z WebDev.WebServer.exe (VS Web Server) w x64?

  2. 2 sposoby konwersji na wielkie litery w Oracle

  3. Jak uzyskać dni robocze lub godziny między dwiema datami?

  4. Zachowaj zamówienie z klauzuli „IN”

  5. Oracle, Ustaw datę i godzinę jako pierwszy dzień miesiąca