Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Analog dari fungsi ORACLE MONTHS_BETWEEN di Java

Saya mengalami kebutuhan yang sama dan mulai dari jawaban @alain.janinm yang bagus tetapi tidak memberikan hasil yang sama persis dalam beberapa kasus.
misal :

Pertimbangkan bulan antara 17/02/2013 dan 11/03/2016 ("dd/MM/yyyy" )
Hasil Oracle :36,8064516129032
Metode Java dari @Alain.janinm jawaban :36.74193548387097

Inilah perubahan yang saya buat, untuk mendapatkan hasil yang lebih dekat dengan months_between() Oracle fungsi :

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

Dengan fungsi ini hasil pemanggilan tanggal 17/02/2013 dan 11/03/2016 adalah :36.806451612903224

Catatan:Dari pemahaman saya months_between() Oracle Oracle fungsi menganggap bahwa semua bulan adalah 31 hari



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Urutan Oracle tidak menghasilkan nomor berkelanjutan

  2. Kursor Untuk Loop cara mencetak pesan saat tidak ditemukan

  3. File Sql Script (apex_epg_config.sql) tidak ada di Oracle Apex 20.2

  4. bagaimana saya bisa menyandikan string di HMAC-SHA256 menggunakan pl/sql?

  5. c# Entity Framework EF 4.1 Ubah Skema dan nama Database saat runtime