Announcement

Collapse
No announcement yet.

Formatierung des Ergebnisses von einer Differenz zweier Daten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Formatierung des Ergebnisses von einer Differenz zweier Daten

    Hi,

    ich möchte bei einer Abfrage auf einer Oracle-Datenbank zwei Daten miteinander subtrahieren. Dies stellt auch weiter kein Problem dar. Das Ergebnis möchte ich aber noch formatiert zurückgeben lassen (nur Anzahl Tage und Stunden).
    Dafür verwende ich folgenden SELECT-Befehl:

    Code:
    SELECT
    to_char(endtime-starttime, 'dd-hh24')
    AS diff
    FROM db2_item;

    Als Ergebnis erhalte ich immer Daten wie, " +000000014 00:00:00.000000", was ja anscheinend weiterhin ein unformatiertes Datum darstellt.
    Ich habe auch schon versucht mir in einem SubSelect die Differenz erzeugen zu lassen und im eigentlichen Select die Formatierung vorzunehmen. Das Ergebnis ist das gleiche.

    Bin für jede Hilfe dankbar

    Danke und Gruß,
    Mark

  • #2
    Hallo Mark,

    bei einer Subtraktion von 2 Daten bekommst Du immer eine Float mit der Einheit Tage zurück!
    Und dann wird beim einem to_char versuch diesesn Wert in ein Datum zu stopfen.

    zb.: select (sysdate-(sysdate-2/24)) from dual;
    --> also 2 Stunden
    .083333333

    Ich habe zwar noch nie mit dem Timestamp gearbeitet bzw. die Doku gelesen, aber ich glaube mit diesem Typ hast Du bessere Möglichkeiten für Dein Problem.

    lg Dietmar

    Comment


    • #3
      Originally posted by marcx View Post
      Hi,
      Als Ergebnis erhalte ich immer Daten wie, " +000000014 00:00:00.000000", was ja anscheinend weiterhin ein unformatiertes Datum darstellt.
      Ich habe auch schon versucht mir in einem SubSelect die Differenz erzeugen zu lassen und im eigentlichen Select die Formatierung vorzunehmen. Das Ergebnis ist das gleiche.

      Bin für jede Hilfe dankbar

      Danke und Gruß,
      Mark
      Hallo,

      Versuche es mal mit folgender Funktion :

      Code:
       create or replace function datediff( p_what in varchar2, 
                                               p_d1   in date, 
                                               p_d2   in date ) return number 
          as 
              l_result    number; 
          begin 
              select (p_d2-p_d1) * 
                     decode( upper(p_what), 
                             'SS', 24*60*60, 'MI', 24*60, 'HH', 24, NULL ) 
              into l_result from dual; 
        
             return l_result; 
         end; 
         /
      -Das würde dann als Beispiel folgendes Ergebnis geben :


      Code:
         
         select datediff ('HH',sysdate,sysdate-1.544)from dual
         /
      Ergebnis : -37.05611111111111111111111111111111111112 Stunden.

      Das solltes du nun problemlos in Tage und Stunden umrechen können...

      Comment


      • #4
        das hier sieht doch gut aus:
        trunc(d2-d1),trunc(24*mod(d2-d1,1))

        Comment

        Working...
        X