Oracle
 sql >> база данни >  >> RDS >> Oracle

Аналог на ORACLE функция MONTHS_BETWEEN в Java

Сблъсках се със същата нужда и започнах от @alain.janinm отговор, който е добър, но не дава точно същия резултат в някои случаи.
напр.:

Помислете за месеци между 17/02/2013 и 11/03/2016 ("dd/MM/yyyy" )
Резултат от Oracle:36,8064516129032
Java метод от @Alain.janinm отговор:36.74193548387097

Ето промените, които направих, за да получа по-близък резултат до months_between() на Oracle функция :

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

С тази функция резултатът от повикването за датите 17/02/2013 и 11/03/2016 е:36.806451612903224

Забележка:Доколкото разбирам months_between() на Oracle функция счита, че всички месеци са дълги 31 дни



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GROUP BY без агрегатна функция

  2. Създайте тригер за вмъкване в друга таблица

  3. Изтриване на записи от една таблица, свързани към друга таблица SQL

  4. 1000000 до 1M и 1000 до 1K в Oracle заявка

  5. Преобразувайте типа данни за времеви отпечатъци в unix времеви печат Oracle