जब आप टाइमस्टैम्प जोड़ते या घटाते हैं, परिणाम एक है अंतराल
, दूसरा टाइमस्टैम्प नहीं। आप extractकोड का उपयोग कर सकते हैं> समारोह
उसमें से घटकों को खींचने के लिए। यदि आप मान हमेशा उप-सेकंड होने जा रहे हैं, तो आप केवल सेकंड निकाल सकते हैं, और मिलीसेकंड प्राप्त करने के लिए एक हज़ार से गुणा कर सकते हैं:
with t as (
select 1 as msg_guid,
interval '0 0:0:0.343009' day to second as diff
from dual
)
select trunc(extract (second from diff) * 1000)
from t;
TRUNC(EXTRACT(SECONDFROMDIFF)*1000)
-----------------------------------
343
यहां आपकी असली क्वेरी उस डमी सीटीई की जगह लेगी जिसका मैंने इंटरवल लिटरल के साथ इस्तेमाल किया था।
यदि अंतराल एक सेकंड से अधिक हो सकता है, तो आप संभवतः पूरे मान को मिलीसेकंड में प्राप्त करना चाहते हैं, इसलिए आपको सभी तत्वों को निकालने और उन्हें एक साथ जोड़ने की आवश्यकता होगी, प्रत्येक को उनके प्रतिनिधित्व के आधार पर गुणा करना होगा - इसलिए एक पूरा दिन होगा 86400000 मिलीसेकंड आदि हो; सादे तत्व इस तरह निकलेंगे:
column diff format a25
with t as (
select 1 as msg_guid,
systimestamp - trunc(systimestamp) as diff
from dual
)
select diff,
extract (day from diff) as dd,
extract (hour from diff) as hh,
extract (minute from diff) as mi,
extract (second from diff) as ss
from t;
DIFF DD HH MI SS
---------------------- ---------- ---------- ---------- ----------
0 9:13:26.150627 0 9 13 26.150627
और आप उन्हें इस तरह संयोजित करेंगे:
with t as (
select 1 as msg_guid,
systimestamp - trunc(systimestamp) as diff
from dual
)
select diff,
trunc(1000 * (
extract (day from diff) * (60*60*24)
+ extract (hour from diff) * (60*60)
+ extract (minute from diff) * 60
+ extract (second from diff)
)) as milliseconds
from t;
DIFF MILLISECONDS
---------------------- ------------
0 9:13:27.650365 33207650
लेकिन आपके पिछले प्रश्न के आधार पर, शायद आप इसे अलग-अलग घटकों के रूप में एक स्ट्रिंग के रूप में चाहते हैं:
with t as (
select 1 as msg_guid,
systimestamp - trunc(systimestamp) as diff
from dual
)
select diff,
extract (day from diff) || ' DAYS '
|| extract (hour from diff) || ' HOURS '
|| extract (minute from diff) || ' MINUTES '
|| trunc(extract (second from diff)) || ' SECONDS '
|| (trunc(extract (second from diff) * 1000)
- (trunc(extract (second from diff)) * 1000)) || ' MILLISECONDS'
as text
from t;
DIFF TEXT
---------------------- -------------------------------------------------------
0 9:43:38.896007 0 DAYS 9 HOURS 43 MINUTES 38 SECONDS 896 MILLISECONDS
SQL Fiddle आपके नमूना डेटा के आधार पर, प्रकार, और समय की गणना के उलट होने के कारण मान सकारात्मक है।