java實現oracle的months_between函式
阿新 • • 發佈:2018-11-11
最近在使用H2記憶體資料庫,在將oracle中的SQL轉換為H2中的SQL時,有些函式H2不存在,幸好H2支援自定義函式 ,於是自己使用日曆寫了下面這個仿oracle的months-between函式:
public static double monthsBetween(Date start,Date end){ Calendar startCalendar = Calendar.getInstance(); startCalendar.setTime(start); Calendar endtCalendar = Calendar.getInstance(); endtCalendar.setTime(end); int startYear = startCalendar.get(Calendar.YEAR); int endYear = endtCalendar.get(Calendar.YEAR); int startMonth = startCalendar.get(Calendar.MONTH); int endMonth = endtCalendar.get(Calendar.MONTH); int startDay = startCalendar.get(Calendar.DATE); int endDay = endtCalendar.get(Calendar.DATE); int startHour =startCalendar.get(Calendar.HOUR_OF_DAY); int startMinute = startCalendar.get(Calendar.MINUTE); int startSecond = startCalendar.get(Calendar.SECOND); int endHour =endtCalendar.get(Calendar.HOUR_OF_DAY); int endMinute = endtCalendar.get(Calendar.MINUTE); int endSecond = endtCalendar.get(Calendar.SECOND); double result = (startYear*12+startMonth) - (endYear*12+endMonth); int countDay = ((startDay * 24) - (endDay * 24))/24; double countHourDay = (startHour - endHour)/24d; double countMinuteDay = (startMinute - endMinute)/(60d*24d); double countSecondDay = (startSecond - endSecond)/(60d*24d*60d); double factor = (1d/31d); result += countDay * factor; result += countHourDay * factor; result += countMinuteDay * factor; result += countSecondDay * factor; return result; }