SQL Datum
Tim
- datenbank
0 Reiner0 Sven Rautenberg0 Axel Richter0 Tim0 Axel Richter0 Axel Richter0 Tim
Hi,
ich habe in meiner SQL-Abfrage eine Subtraktion von zwei Daten:
erfasst_am - erledigt_am
22.03.2001 13:22:47 - 26.03.2001 08:32:49
Als Ergebnis bekomme ich:
28.12.1899 04:49:58
Leider ist mir das Ergebnis völlig unklar.
Hat jemand hier eine Idee?
Mfg
Tim
Hi,
ich habe in meiner SQL-Abfrage eine Subtraktion von zwei Daten:
erfasst_am - erledigt_am
22.03.2001 13:22:47 - 26.03.2001 08:32:49Als Ergebnis bekomme ich:
28.12.1899 04:49:58Leider ist mir das Ergebnis völlig unklar.
Hat jemand hier eine Idee?
zunächst wäre es interessant zu wissen, von welchem DBMS Du sprichst.
Wenn Du z.B. MySQL nutzt, ist die Datumsangabe nicht korrekt. Dort müßte das Datum so geschrieben werden: 'JJJJ-MM-TT'
Gruß
Reiner
Hi Rainer,
es ist ein MS SQL Server. Für mich ist die Differenz der Daten wichtig. Hast du da eine Idee?
Mfg
tim
Hi Rainer,
es ist ein MS SQL Server. Für mich ist die Differenz der Daten wichtig. Hast du da eine Idee?
wie subtrahierst Du denn?
Gruß
Reiner
Wie meinst du das?
Ich möchte, dass da zum Schluss steht 01.00.0000 15:05:47
Also eine Differenz von z.B. einem Tag, null Monaten, null Jahren, 15 Stunden, 5 Minuten und 47 Sekunden.
Verstehst du grob was ich meine?
Gruss Tim
Moin!
Als Ergebnis bekomme ich:
28.12.1899 04:49:58
Leider ist mir das Ergebnis völlig unklar.
Hat jemand hier eine Idee?
Vermutung: MSSQL zählt die Zeit seit dem 1.1.1900 als fortlaufende Float-Zahl, die sich natürlich auch subtrahieren läßt. Das Ergebnis zweier Daten der heutigen Zeit liegt nahe Null und somit auch nahe des Jahreswechsels von 1900 - aber nicht in der Nähe des Jahres "0000".
Du solltest mal gucken, welche Zeitkonvertierungsfunktionen es gibt. Die Differenz der beiden Zeitpunkte liefert dir die dazwischen liegende Zeit in irgendeiner Einheit (vermutlich Sekunden oder Bruchteile von Tagen), die sich natürlich wieder in ein menschenlesbares Format umwandeln ließe (13654 Sekunden oder 0,21236 Tage sind nicht wirklich benutzerfreundlich). In diesem Zusammenhang (auch wenn MSSQL da vielleicht eigene Funktionen bietet) der Verweis auf http://aktuell.de.selfhtml.org/tippstricks/programmiertechnik/zeitberechnung/index.htm
Hallo,
ich habe in meiner SQL-Abfrage eine Subtraktion von zwei Daten:
erfasst_am - erledigt_am
22.03.2001 13:22:47 - 26.03.2001 08:32:49Als Ergebnis bekomme ich:
28.12.1899 04:49:58Leider ist mir das Ergebnis völlig unklar.
Du ziehst vom kleineren Wert (22.03.2001 13:22:47) den größeren Wert (26.03.2001 08:32:49) ab. Das Ergebnis ist:
-3,798634259
oder
Formatiert als Datum, wenn 0 = 0.0.1900:
28.12.1899 04:49:58
Alles klar?
viele Grüße
Axel
Das Ergebnis ist:
-3,798634259
oder
- (03 Tage 19 Stunden 10 Minuten 2 Sekunden)
Formatiert als Datum, wenn 0 = 0.0.1900:
28.12.1899 04:49:58
Hi Alex,
danke erstmal für die Antwort. Leider bekomme ich ein anderes Ergebnis:
04.01.1900 19:10:02
Kann man das auch umwandeln?
Hallo,
danke erstmal für die Antwort. Leider bekomme ich ein anderes Ergebnis:
04.01.1900 19:10:02
Kann man das auch umwandeln?
Jetzt subtrahierst Du aber den kleineren vom größeren Wert, so dass das Ergebnis positiv wird und MS SQL hat offensichtlich 0 = 01.01.1900 (auch vorher, beim negativen Ergebnis, das hatte ich übersehen).
Wo siehst Du das Ergebnis? In der Ansicht muss das bereits irgendwie formatiert werden, sonst würde 3,798634259 zu sehen sein. Du musst hier das Format der Ausgabe von (TT.MM.JJJJ hh:mm:ss) verändern in (TT hh:mm:ss). Ob die Formatpattern so stimmen, weiß ich nicht.
Hat MS SQL keine DATEDIFF - Funktion?
viele Grüße
Axel
Hallo,
Du musst hier das Format der Ausgabe von (TT.MM.JJJJ hh:mm:ss) verändern in (TT hh:mm:ss).
Waah! Das vergiss schnell wieder! Was, wenn die Differenz mehr als einen Monat beträgt? Dann kommen hier völlig falsche Aussagen raus. Nein, Du kannst die Differenz erst mal nur als Float-Zahl (im Beispiel 3,798634259 Tage) betrachten. Nur mit Formatierung kann man die nicht umwandeln.
viele Grüße
Axel
Hi Alex,
bin grade etwas verwirrt. Was soll ich jetzt genau machen?
Hallo,
bin grade etwas verwirrt. Was soll ich jetzt genau machen?
1. Nachsehen, ob MS SQL keine DATEDIFF-Funktion hat und ob Du damit nicht bereits das gewünschte Ergebnis erzielen kannst.
2. Wenn das nicht so ist, mir folgende Fragen beantworten:
Wie ermittelst Du die Differenz bisher, also Wie sieht die Abfrage aus?
Wo siehst Du das Ergebnis? In der Ansicht muss das bereits irgendwie formatiert werden, sonst würde 3,798634259 zu sehen sein.
viele Grüße
Axel
Hallo Axel
bin grade etwas verwirrt. Was soll ich jetzt genau machen?
- Nachsehen, ob MS SQL keine DATEDIFF-Funktion hat und ob Du damit nicht bereits das gewünschte Ergebnis erzielen kannst.
Selbstverständlich gibt es eine DATEDIFF-Funktion in Transact-SQL :-)
DATEDIFF ( datepart , startdate , enddate )
Die Online-Hilfe gibt weitere Hinweise zur Verwendung, ich zitiere:
<zitat quelle="MS SQL Server Online-Dokumentation">
Hinweise
startdate wird von enddate subtrahiert. Wenn startdate später ist als enddate, wird ein negativer Wert zurückgegeben.
DATEDIFF erzeugt einen Fehler, wenn das Ergebnis außerhalb des Bereichs für ganze Zahlen liegt. Bei Millisekunden beträgt der maximale Zeitraum 24 Tage, 20 Stunden, 31 Minuten und 23,647 Sekunden. Bei Sekunden sind dies maximal 68 Jahre.
Durch das Zählen von überschrittenen Einheiten wie Minuten, Sekunden oder Millisekunden ist das von DATEDIFF erzeugte Ergebnis über alle Datentypen hinweg konsistent. Das Ergebnis ist ein ganzzahliger, vorzeichenbehafteter Wert, der der Zahl der zwischen dem ersten und dem zweiten Datum überschrittenen datepart-Einheiten entspricht. Beispielsweise ist die Anzahl der Wochen zwischen Sonntag, dem 4. Januar, und Sonntag, dem 11. Januar, gleich 1.
</zitat>
Der OP könnte somit DATEDIFF mehrfach (für jedes benötigte Zeitintervall) aufrufen, evtl. hilft ihm auch
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
weiter, oder er rechnet das Ergebnis selbst in sein Format um.
Freundliche Grüße
Vinzenz