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

समय घटाव प्रारूप परिणाम

जब आप एक टाइमस्टैम्प को दूसरे से घटाते हैं तो परिणाम एक आंतरिक अंतराल डेटा प्रकार होता है, लेकिन आप इसे 'अंतराल दिन से सेकंड' के रूप में मान सकते हैं:

select
(localtimestamp - to_timestamp(us.STARTDATETIME,'hh24:mi:ss')) as HoursPassed
from random us;

HOURSPASSED        
-------------------
+08 15:26:54.293892

'+08' (मेरे सत्र समय क्षेत्र में) दिनों की संख्या है, यूटीसी ऑफसेट नहीं; यही वह मान है, क्योंकि जब आप किसी स्ट्रिंग को दिनांक या टाइमस्टैम्प में कनवर्ट करते हैं और केवल समय भाग प्रदान करते हैं, तो दिनांक भाग डिफ़ॉल्ट रूप से चालू माह के पहले दिन पर आ जाता है:

<ब्लॉकक्वॉट>

डिफ़ॉल्ट दिनांक मान निम्नानुसार निर्धारित किए जाते हैं:

  • वर्ष चालू वर्ष है, जैसा कि SYSDATE द्वारा लौटाया गया है।
  • महीना चालू माह है, जैसा कि SYSDATE द्वारा लौटाया गया है।
  • दिन 01 (महीने का पहला दिन) है।
  • घंटा, मिनट और सेकंड सभी 0 हैं।

इन डिफ़ॉल्ट मानों का उपयोग उस क्वेरी में किया जाता है जो दिनांक मानों का अनुरोध करती है जहां दिनांक स्वयं निर्दिष्ट नहीं है ...

इसलिए मैं वास्तव में तुलना कर रहा हूं:

select localtimestamp, to_timestamp(us.STARTDATETIME,'hh24:mi:ss')
from random us;

LOCALTIMESTAMP             TO_TIMESTAMP(US.STARTDATET
-------------------------- --------------------------
2017-08-09 23:26:54.293892 2017-08-01 08:00:00.000000

आप सीधे अंतराल को प्रारूपित नहीं कर सकते हैं, लेकिन आप समय के तत्वों को निकाल सकते हैं और उन्हें अलग से प्रारूपित कर सकते हैं, और उन्हें जोड़ सकते हैं।

select to_char(extract(hour from (localtimestamp
    - to_timestamp(us.STARTDATETIME, 'hh24:mi:ss'))), 'FM00')
  ||':'|| to_char(extract(minute from (localtimestamp
    - to_timestamp(us.STARTDATETIME, 'hh24:mi:ss'))), 'FM00')
  ||':'|| to_char(extract(second from (localtimestamp
    - to_timestamp(us.STARTDATETIME, 'hh24:mi:ss'))), 'FM00')
  as hourspassed
from random us;

HOURSPASSED
-----------
15:26:54

एक ही अंतराल की बार-बार गणना करना थोड़ा बेकार और प्रबंधित करने में कठिन लगता है, इसलिए आप इसे इनलाइन दृश्य या CTE में कर सकते हैं:

with cte (diff) as (
  select localtimestamp - to_timestamp(us.STARTDATETIME, 'hh24:mi:ss')
  from random us
)
select to_char(extract(hour from diff), 'FM00')
  ||':'|| to_char(extract(minute from diff), 'FM00')
  ||':'|| to_char(extract(second from diff), 'FM00')
  as hourspassed
from cte;

HOURSPASSED
-----------
15:26:54

आप टाइमस्टैम्प के बजाय तिथियों का भी उपयोग कर सकते हैं; घटाव तब आपको पूरे और भिन्नात्मक दिनों के साथ एक संख्या के रूप में अंतर देता है:

select current_date - to_date(us.STARTDATETIME, 'hh24:mi') as hourspassed
from random us;

HOURSPASSED
-----------
 8.64368056

इसे प्रारूपित करने का सबसे आसान तरीका है कि इसे किसी ज्ञात मध्यरात्रि समय में जोड़ा जाए और फिर to_char() का उपयोग किया जाए। :

select to_char(date '1970-01-01'
  + (current_date - to_date(us.STARTDATETIME, 'hh24:mi')),
  'HH24:MI:SS') as hourspassed
from random us;

HOURSPAS
--------
15:26:54

मैं current_date with के साथ फंस गया हूं localtimestamp . के निकटतम मिलान के रूप में; आप वास्तव में systimestamp . चाह सकते हैं और/या sysdate . (यहां अंतर पर अधिक।)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओरेकल:कैसे एक प्रश्न के द्वारा कुल प्रतिशत प्राप्त करने के लिए?

  2. Oracle PL/SQL:UTL_FILE.FCOPY उदाहरण

  3. BadImageFormatException। यह तब होगा जब 64 बिट मोड में 32 बिट Oracle क्लाइंट स्थापित घटकों के साथ चल रहा हो

  4. स्ट्रिंग को कई पंक्तियों में विभाजित करें

  5. जहां शर्त में स्ट्रिंग मान स्वीकार नहीं किया जा रहा है