Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tương tự của hàm ORACLE MONTHS_BETWEEN trong Java

Tôi đã gặp phải nhu cầu tương tự và bắt đầu từ câu trả lời @ alain.janinm là tốt nhưng không cho kết quả chính xác trong một số trường hợp.
ví dụ:

Xem xét các tháng từ 17/02/2013 đến 11/03/2016 ("dd/MM/yyyy" )
Kết quả Oracle:36,8064516129032 Phương thức
Java từ @ Alain.janinm answer:36.74193548387097

Đây là những thay đổi tôi đã thực hiện, để có được kết quả gần hơn với months_between() của Oracle chức năng:

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

Với hàm này, kết quả của lệnh gọi cho các ngày 17/02/2013 và 11/03/2016 là:36.806451612903224

Lưu ý:Theo hiểu biết của tôi months_between() của Oracle hàm coi rằng tất cả các tháng đều dài 31 ngày



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuỗi cập nhật trong Oracle với mili giây

  2. Công cụ dành cho nhà phát triển Oracle SQL:Tải xuống &Cài đặt

  3. Thực thi truy vấn Sql động trong Oracle

  4. Hàm JSON_OBJECTAGG () trong Oracle

  5. Làm thế nào để tìm sự khác biệt b / w các giá trị định dạng TIMESTAMP trong Oracle?