W bazie danych Oracle MONTHS_BETWEEN()
funkcja zwraca liczbę miesięcy między dwiema datami.
Składnia
Składnia wygląda tak:
MONTHS_BETWEEN(date1, date2)
Przykład
Oto przykład:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;
Wynik:
4
W tym przypadku między tymi dwiema datami są dokładnie cztery miesiące.
Miesiąc i ostatni dzień miesiąca są określone przez parametr sesji NLS_CALENDAR
. Zobacz Jak sprawdzić wartości parametrów NLS, aby dowiedzieć się, z którego kalendarza korzysta Twoja sesja. Mój używa kalendarza gregoriańskiego.
Ułamkowe miesiące
Funkcja pozwala na ułamkowe miesiące. Jeśli te dwie daty obejmują różne porcje dnia, baza danych Oracle opracowuje odpowiedni składnik ułamkowy do użycia.
Przykład:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;
Wynik:
3.51612903225806451612903225806451612903
Ujemne miesiące
Jeśli druga data jest późniejsza niż pierwsza, zwracana jest kwota ujemna:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;
Wynik:
-4
Daty spoza zakresu
Data zerowa i inne daty spoza zakresu skutkują błędem.
Przykład:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;
Wynik:
Error starting at line : 1 in command - SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00') FROM DUAL Error at Command Line : 1 Column : 47 Error report - SQL Error: ORA-01841: (full) year must be between -4713 and +9999, and not be 0 01841. 00000 - "(full) year must be between -4713 and +9999, and not be 0" *Cause: Illegal year entered *Action: Input year in the specified range
Zgodnie z komunikatem o błędzie (pełny) rok musi mieścić się w przedziale -4713
i +9999
i nie być 0
.
Porównywanie daty z datą bieżącą
Możemy przekazać SYSDATE
jako argument datetime do porównania daty z bieżącą datą:
SELECT
SYSDATE,
MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;
Wynik:
SYSDATE MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') ____________ ____________________________________________ 13/AUG/21 -102.587825194145758661887694145758661888
Brakujący argument
Wywołanie MONTHS_BETWEEN()
z niewłaściwą liczbą argumentów lub bez przekazywania jakichkolwiek argumentów powoduje błąd:
SELECT MONTHS_BETWEEN()
FROM DUAL;
Wynik:
Error starting at line : 1 in command - SELECT MONTHS_BETWEEN() 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: