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

MONTHS_BETWEEN() Funkcja w Oracle

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:

  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 wybrać listę 10 000 unikalnych identyfikatorów z dual w Oracle SQL

  2. Jak interpretujesz plan wyjaśniania zapytania?

  3. pobierz nazwę tabeli z kolumny dla klauzuli from

  4. Pierwsze kroki z Oracle Autonomous Database w chmurze

  5. 5 sposobów aktualizacji danych za pomocą podzapytania w Oracle SQL