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

Analog funkcji ORACLE MONTHS_BETWEEN w Javie

Wpadłem na tę samą potrzebę i zacząłem od odpowiedzi @alain.janinm, która jest dobra, ale w niektórych przypadkach nie daje dokładnie tego samego wyniku.
np :

Rozważ miesiące od 17.02.2013 do 11.03.2016 ("dd/MM/yyyy" )
Wynik Oracle:36,8064516129032
Metoda Java z @Alain.janinm odpowiedź:36.74193548387097

Oto zmiany, które wprowadziłem, aby uzyskać bliższy wynik months_between() Oracle funkcja :

public static double monthsBetween(Date startDate, Date endDate){  

    Calendar cal = Calendar.getInstance(); 

    cal.setTime(startDate);  
    int startDayOfMonth = cal.get(Calendar.DAY_OF_MONTH);
    int startMonth =  cal.get(Calendar.MONTH);
    int startYear = cal.get(Calendar.YEAR);  

    cal.setTime(endDate);
    int endDayOfMonth = cal.get(Calendar.DAY_OF_MONTH);  
    int endMonth =  cal.get(Calendar.MONTH);
    int endYear = cal.get(Calendar.YEAR);  


    int diffMonths = endMonth - startMonth;
    int diffYears = endYear - startYear;
    int diffDays = endDayOfMonth - startDayOfMonth;

    return (diffYears * 12) + diffMonths + diffDays/31.0;
} 

Dzięki tej funkcji wynik wywołania dla dat 17.02.2013 i 11.03.2016 to:36.806451612903224

Uwaga :Z mojego zrozumienia months_between() Oracle funkcja uwzględnia, że ​​wszystkie miesiące trwają 31 dni



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. oracle sql if warunek następnie wybierz instrukcję1 w przeciwnym razie wybierz instrukcję2

  2. Rozszerz kontrolę sieci EM na nowe węzły

  3. jak wysyłać zapytania do bazy danych Oracle na podstawie danych wprowadzonych przez użytkownika za pomocą asp.net c#

  4. typ danych ograniczenia Oracle

  5. Pominąć zawartość polecenia SQLplus w systemie UNIX?