Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

TIMESTAMP अंतर कॉलम डेटा को स्ट्रिंग प्रारूप में कनवर्ट करें

जब आप टाइमस्टैम्प जोड़ते या घटाते हैं, परिणाम एक है अंतराल , दूसरा टाइमस्टैम्प नहीं। आप 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 आपके नमूना डेटा के आधार पर, प्रकार, और समय की गणना के उलट होने के कारण मान सकारात्मक है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle में LPAD () फ़ंक्शन

  2. मैं पीएल/एसक्यूएल में दो समान डेटाबेस-स्कीमा को कैसे मर्ज करूं?

  3. Oracle पर टाइमज़ोन-निर्भर सिस्टिमस्टैम्प और टाइमस्टैम्प तुलना

  4. स्कीमा निर्दिष्ट करते समय Oracle SQLPlus ORA-01017 अमान्य क्रेडेंशियल

  5. एक समूह में एक रिकॉर्ड का मूल्य बहिष्कृत करें यदि कोई अन्य मौजूद है v2