sql >> Database teknologi >  >> RDS >> Oracle

Analog af ORACLE-funktionen MONTHS_BETWEEN i Java

Jeg er stødt på det samme behov og er gået ud fra @alain.janinm svar, som er godt, men i nogle tilfælde ikke giver præcis samme resultat.
eks:

Overvej måneder mellem 17/02/2013 og 11/03/2016 ("dd/MM/yyyy" )
Oracle-resultat:36,8064516129032
Java-metode fra @Alain.janinm svar :36.74193548387097

Her er de ændringer, jeg lavede, for at komme tættere på Oracles months_between() funktion :

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;
} 

Med denne funktion er resultatet af opkaldet for datoerne 17/02/2013 og 11/03/2016:36.806451612903224

Bemærk:Efter min forståelse er Oracles months_between() funktion vurderer, at alle måneder er 31 dage lange



  1. Skal vise MAX COUNT af den samlede kunde ved at sammenligne to tabeller

  2. Hvad betyder ORDER BY (SELECT NULL)?

  3. Doktrin 2 Query Builder abs Funktion

  4. Spring Boot Actuator/health endpoint viser ikke database- eller filsystemoplysninger