今天的工作中遇到一個問題,需要計算數據庫中兩個時間字段的差值,字段類型是timestamp,將字段直接相減,會得到timestamp類型的結果值,不是我想要的number類型的值。在網上找了一些方法,只能得到4舍5入的結果,這樣造成毫秒數不準確
後來再一篇博客中得到啓發:
select (to_date(substr(t.end_time, 1, 19), 'yyyy-mm-dd hh24:mi:ss') -
to_date(substr(t.start_time, 1, 19), 'yyyy-mm-dd hh24:mi:ss')) * 24 * 3600 * 1000 +
to_number(substr(t.end_time, 21, 3)) -
to_number(substr(t.start_time, 21, 3))
from rpt.bs_srv_log_1028 t;
這是一種思路,將毫秒和之前的日期分開計算,也是一種方法,但是執行計劃效率不夠高
後來找到了兩個函數解決了這個問題:
EXTRACT(SECOND FROM(t.end_time - t.start_time)) * 1000
這樣就完美的得到了我想要的毫秒數值啦~