Jus*_*ave 74
当你减去两个类型的变量时TIMESTAMP,你会得到一个INTERVAL DAY TO SECOND包括毫秒和/或微秒的数量,具体取决于平台.如果数据库在Windows上运行,systimestamp通常会有毫秒.如果数据库在Unix上运行,systimestamp通常会有几微秒.
1 select systimestamp - to_timestamp( '2012-07-23', 'yyyy-mm-dd' )
2* from dual
SQL> /
SYSTIMESTAMP-TO_TIMESTAMP('2012-07-23','YYYY-MM-DD')
---------------------------------------------------------------------------
+000000000 14:51:04.339000000
Run Code Online (Sandbox Code Playgroud)
您可以使用该EXTRACT函数来提取单个元素INTERVAL DAY TO SECOND
SQL> ed
Wrote file afiedt.buf
1 select extract( day from diff ) days,
2 extract( hour from diff ) hours,
3 extract( minute from diff ) minutes,
4 extract( second from diff ) seconds
5 from (select systimestamp - to_timestamp( '2012-07-23', 'yyyy-mm-dd' ) diff
6* from dual)
SQL> /
DAYS HOURS MINUTES SECONDS
---------- ---------- ---------- ----------
0 14 55 37.936
Run Code Online (Sandbox Code Playgroud)
然后,您可以将每个组件转换为毫秒并添加它们
SQL> ed
Wrote file afiedt.buf
1 select extract( day from diff )*24*60*60*1000 +
2 extract( hour from diff )*60*60*1000 +
3 extract( minute from diff )*60*1000 +
4 round(extract( second from diff )*1000) total_milliseconds
5 from (select systimestamp - to_timestamp( '2012-07-23', 'yyyy-mm-dd' ) diff
6* from dual)
SQL> /
TOTAL_MILLISECONDS
------------------
53831842
Run Code Online (Sandbox Code Playgroud)
但是,通常情况下,使用INTERVAL DAY TO SECOND表示或具有小时,分钟,秒等的单独列更有用,而不是计算两个TIMESTAMP值之间的总毫秒数.
Bri*_*ity 24
这是一个存储过程来执行此操作:
CREATE OR REPLACE function timestamp_diff(a timestamp, b timestamp) return number is
begin
return extract (day from (a-b))*24*60*60 +
extract (hour from (a-b))*60*60+
extract (minute from (a-b))*60+
extract (second from (a-b));
end;
/
Run Code Online (Sandbox Code Playgroud)
如果您还希望打败那些否定他的工作的Oracle开发人员,请投票!
因为第一次比较时间戳应该花大约一个小时左右......
pat*_*515 15
SELECT numtodsinterval(date1-date2,'day') time_difference from dates;
Run Code Online (Sandbox Code Playgroud)
SELECT (extract(DAY FROM time2-time1)*24*60*60)+
(extract(HOUR FROM time2-time1)*60*60)+
(extract(MINUTE FROM time2-time1)*60)+
extract(SECOND FROM time2-time1)
into diff FROM dual;
RETURN diff;
Run Code Online (Sandbox Code Playgroud)
Select date1 - (date2 - 1) * 24 * 60 *60 * 1000 from Table;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
319828 次 |
| 最近记录: |