在开发程序时,我们经常会遇到要计算从startTime到endTime的时间差,但这个记录时间差的字段是Varchar型的,这就需要先进行数据类型的转换才能达到目的:
先来看看ORACLE系统时间的时间差计算方法:
SELECT
SYSDATE,SYSDATE-500,
TO_CHAR(SYSDATE,'yyyy')-
TO_CHAR(SYSDATE-500,'yyyy') AS YEAR2
FROM dual;
运行结果: YEAR2 : 2
在ORACLE里日期直接相减就是相差天数,默认的单位是天,
要想计算别的计量单位,可以把DATE进行日期格式化,这样就能
得到你想的计量结果了:
SELECT (
TRUNC ( TO_DATE('2009-02-24 19:30','YYYY-MM-DD HH24:MI'),'MI') -
TRUNC ( TO_DATE('2009-02-23 19:30','YYYY-MM-DD HH24:MI'),'MI')
) * 24*60
FROM dual;
运行结果: 1440
从计算DATE型日期之间的时间差得到启发, 只需要先进行数据类型的转换,再进行日期格式化就OK了:
- 消逝的时间(以天为单位)
TRUNC (TO_DATE(end-date-start_date))
- 消逝的时间(以小时为单位)
TRUNC (TO_DATE(end-date-start_date)*24)
- 消逝的时间(以分钟为单)
TRUNC (TO_DATE(end-date-start_date)*24*60)
计算Varchar型的startTime到endTime时的时间差:
SELECT (
TRUNC (TO_DATE('19:30','HH24:MI'),'MI') -
TRUNC (TO_DATE('18:30','HH24:MI'),'MI')
) * 24 * 60
FROM dual;
运行结果: 60