我有下面的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;

08-19 00:17