版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/zht741322694/article/details/83654742
最近在使用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; }