2012-12-25 26 views
7

में दिए गए प्रारूप में समय अंतर को परिवर्तित करना मैं EVENT_DATE_B - EVENT_DATE_A कैसे परिवर्तित करूं जो HH:MM प्रारूप के साथ स्ट्रिंग करने के लिए कई दिन हैं?ओरेकल

उत्तर

4

दिनांकों हैं समय भाग में केवल अलग आप दूसरे के लिए अंतराल दिन का उपयोग कर सकते हैं। उदाहरण के लिए:

SQL> select (to_date('25.12.12 15:37:32', 'DD.MM.YY HH24:MI:SS') 
    2  - to_date('25.12.12 12:45:45', 'DD.MM.YY HH24:MI:SS')) day(0) to second(0) as Time 
    3 from dual 
    4 ; 

TIME 
------------- 
+0 02:51:47 

लेकिन जाहिर है कि यह हमेशा मामला नहीं होगा। तो अगर आप समय के विभिन्न भागों की गणना करने के लिए एक लंबे क्वेरी लिख सकता है, लेकिन मुझे लगता है कि मैं इस साधारण समारोह के साथ जाना होगा:

SQL> create or replace function DaysToTime(p_val in number) 
    2 return varchar2 
    3 is 
    4 l_hours number; 
    5 l_minutes number; 
    6 l_seconds number; 
    7 begin 
    8 l_Hours := 24 * p_val; 
    9 l_minutes := (l_hours - trunc(l_hours)) * 60; 
10 l_seconds := (l_minutes - trunc(l_minutes)) * 60; 
11 return to_char(trunc(l_hours), 'fm09') ||':'|| 
12   to_char(trunc(l_minutes), 'fm09')||':'|| 
13   to_char(trunc(l_seconds), 'fm09'); 
14 end; 
15/

Function created 

और अब क्वेरी होगा:

SQL> select DaysToTime(to_date('25.12.12 15:37:32', 'DD.MM.YY HH24:MI:SS') 
    2  - to_date('25.12.12 12:45:45', 'DD.MM.YY HH24:MI:SS')) as Time 
    3 from dual 
    4 ; 

TIME 
---------- 
02:51:47 
1
select 24 * (EVENT_DATE_B - EVENT_DATE_A) || ':' || '00' 
from your_table 

SQLFiddle demo

+2

'EVENT_DATE_B - EVENT_DATE_A' एक पूर्णांक – turbanoff

+0

ऐसा ही कुछ के लिए अच्छा नहीं है नहीं हो सकता है' का चयन 24 * (TO_DATE ('25 .12.12 15:37:32 ',' डीडी.एमएम.वाईवाई एचएच 24: एमआई: एसएस ') - to_date ('25.12.12 12:45:45', 'डीडी.एमएम.वायवाई एचएच 24: एमआई: एसएस') || || ':' || '00' दोहरी से – lexeme

4

एक और दृष्टिकोण (एक क्वेरी अलग अलग दिनों पर हो सकता है):

with tt as (
    select numToDsinterval((EVENT_DATE_B - EVENT_DATE_A), 'DAY') dsint 
    from t) 
select (extract(day from dsint)*24)+extract(hour from dsint) || 
     ':' ||extract(minute from dsint) 
from tt 

Here is a sqlfiddle demo

+0

+1 बेशक। किसी कारण से मैंने 'NumToDSInterval' के बारे में सोचा नहीं था :) –

1

मुझे लगता है कि आपको दिनांक 1 और दिनांक 2 के बीच की संख्या जानने की आवश्यकता है, फिर दिनांक 2 से इस अंतर को घटाएं और अंतिम तिथि को अपने प्रारूप में रूपांतरित करें। कॉपी/पेस्ट और आउटपुट देखें:

Select date2, days_between, to_char(date2-days_between, 'mm-dd-yyyy hh24:mi:ss') end_date 
From 
(
Select sysdate date2 
    , trunc(sysdate)-to_date('20-DEC-2012') days_between --'20-DEC' is start_date 
From dual 
) 
/