sql >> Databáze >  >> RDS >> Oracle

Analog funkce ORACLE MONTHS_BETWEEN v Javě

Narazil jsem na stejnou potřebu a začal jsem od odpovědi @alain.janinm, která je dobrá, ale v některých případech nedává přesně stejný výsledek.
ex :

Vezměte v úvahu měsíce mezi 17/02/2013 a 11/03/2016 ("dd/MM/yyyy" )
Výsledek Oracle:36,8064516129032
Metoda Java od @Alain.janinm odpověď:36.74193548387097

Zde jsou změny, které jsem provedl, abych se přiblížil výsledku months_between() společnosti Oracle funkce :

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

S touto funkcí je výsledek volání pro data 17/02/2013 a 11/03/2016:36.806451612903224

Poznámka:Z mého porozumění months_between() Oracle funkce předpokládá, že všechny měsíce mají 31 dní



  1. Jaký je maximální počet připojení ke stolu v MariaDB?

  2. Funkce CHR() v Oracle

  3. CHECK CONSTRAINT řetězce obsahovat pouze číslice. (Oracle SQL)

  4. Jak vynásobit dvě hodnoty sloupce a zobrazit jeho výsledek na konci každého řádku?