我有下面的java方法,它将在几秒钟内找到两个日期的差,它工作正常。
public class dateconvetr {
public static void main(String[] args) throws ParseException {
long differenceInMillis = 0;
long diffInSecs =0;
SimpleDateFormat sdf = new SimpleDateFormat("MMddyyyyHHmmssSSS");
SimpleDateFormat sdf2 = new SimpleDateFormat("MMddyyyyHHmmssSSS");
Date date1 = sdf.parse("09122014165749983");
Date date2 = sdf2.parse("09122014175749983");
System.out.println("get time2 is:" + date2.getTime() );
System.out.println("get time 1:" + date1.getTime() );
differenceInMillis = date2.getTime() - date1.getTime();
System.out.println("differenceInMillis:"+differenceInMillis);
diffInSecs = differenceInMillis/1000;
System.out.println("diffInSecs"+diffInSecs);
}
}
现在我想在PL / SQL中执行相同的操作,在这里我需要以秒为单位获取两个日期(以
varchar2
格式存储在表中的MMddyyyyHHmmssSSS
)的差。我尝试过,但是得到了一些错误的值:
select round(param_x-param_y )*86400 FROM table_x;
最佳答案
这个概念是正确的,但是您缺少将这些varchar值转换为时间戳的方法,就像您在Java中所做的那样。另外,为了提高精度,最好在乘法之后四舍五入,而不是在四舍五入之前:
SELECT ROUND((TO_TIMESTAMP(param_x, 'mmddyyyyhh24missFF3') -
TO_TIMESTAMP(param_y, 'mmddyyyyhh24missFF3')) * 86400)
FROM table_x;