2017-03-21 4 views
0

Ich habe eine Tabelle, die zwei Felder mit TimeStamp in Oracle DB hat. Ich muss den Unterschied zwischen diesen beiden Spalten in Tagen einschließlich Zeitmarkenwerten berechnen.Unterschied zwischen zwei Zeitstempeln (in Tagen) in Orakel einschließlich Unterschied zwischen Zeitstempel

Ex :- I have both column values as following than 
Column1 value = 07-DEC-16 11.05.24.500000000 PM 
Column2 value = 08-DEC-16 03.12.06.874000000 AM 

Tage Berechnung sollte Derzeit als 1 dargestellt werden, nachdem Suche zu tun und viele Fragen zu lesen auf Stackoverflow kam ich zu wissen, und jetzt verwende ich folgende Abfrage Unterschied zwischen diesen beiden Spalten zu berechnen

Select Extract(Day From Diff) Days 
From (Select B1.Column2 - B1.Column1 As Diff 
From Table1 B1); 

Diese Abfrage ergibt berechnet Tage als 0 statt 1.

ich bin nicht das, was immer, Führer durch Sie erfolgen. Muss ich es in ein anderes Format konvertieren? oder etwas anderes ?

+1

Es ist tatsächlich 0,6713 ... Tage Unterschied, also welche Logik verwenden Sie, dass dies 1 Tag Unterschied ist? Vergleichst du nur die "YYYY-MM-DD" Teile und es gibt 1 Tag Unterschied zwischen dem 7. Dezember und dem 8. Dezember? Oder machst du eine Rundung? Wenn ja, was würde für 1.001 Tage Unterschied passieren (würde diese Runde zu 1 oder 2 Tagen Unterschied)? – MT0

+0

Beginnen Sie mit Ihrer tatsächlichen Datumsdifferenz von "+00 04: 06: 42.374000". Aus diesem Ergebnis extrahierst du den Tageswert, der korrekt 0 ist. Was ist deine Anforderung, die besagt, dass "Tage die Berechnung als 1 angezeigt werden soll"? Der Unterschied in den Zeitstempeln beträgt etwas mehr als 4 Stunden. Wie wird das 1 Tag? Was ist, wenn der Unterschied von 4 Stunden am selben Tag liegt? – unleashed

+0

Die Anforderung besagt nicht, dass es genau 1 Tag berechnen soll, es besagt, dass die Tagesdifferenz einschließlich der Zeitdifferenz berechnet werden soll. – artapart

Antwort

3

Wenn Sie nur den Unterschied 2016-12-07-2016-12-08 wollen (die Zeitkomponenten zu ignorieren), dann:

SELECT TRUNC(column2) - TRUNC(column1) AS days 
FROM table1 

Wenn Sie die Differenz wollen dann auf den nächsten Tag aufgerundet wird (die Sekundenbruchteile zu ignorieren), könnten Sie tun :

SELECT CEIL(CAST(column2 AS DATE) - CAST(column1 AS date)) AS days 
FROM table1 

Wenn Sie dann Sekundenbruchteile und runden bis zum nächsten Tag enthalten sein sollen:

SELECT CEIL(
     TRUNC(column2, 'MI') 
     - TRUNC(column1, 'MI') 
     + EXTRACT(SECOND FROM column2)/(24*60*60) 
     - EXTRACT(SECOND FROM column1)/(24*60*60) 
     ) AS days 
FROM table1 
Verwandte Themen