Announcement

Collapse
No announcement yet.

SQL Server: Sum(datetime)

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

  • SQL Server: Sum(datetime)

    Hallo,

    in einer Applikation bilde ich die Summe zweier DateTime-Felder um als Differenz die Zeitdauer zu ermitteln:

    select datum, ID, sum(ZeitVon), sum(ZeitBis)
    from Zeitdatei
    where datum =:datum
    and ID =:ID
    group by datum, ID

    Diff:=HourSpan(ZeitdateiExpr1001.Value, ZeitdateiExpr1002.Value);

    Bei einer Access-Datenbank klappt dies auch einwandfrei, nach meiner Migration auf SQL-Server erhalte ich die Fehlermeldung dass die Aggregatsfunktion sum bei DateTime-Feldern nicht erlaubt ist.

    Gibt es eine andere Möglichkeit die Zeitanteile in einer SQL Datenbank irgendwie aufzuaddiern?

    Vielen Dank und viele Grüße

    Christoph

  • #2
    Hi,

    wie addiert man denn den 01.02.2007 und den 01.03.2007 ??

    Im SQL-Server gibt es z.B. DATEADD ( datepart , number, date ), um Tage, Monate oder Jahre zu addieren oder DATEDIFF ( datepart , startdate , enddate ), um Differenzen zu bilden.

    Grüße

    Julia

    Comment


    • #3
      Hallo Julia,

      Danke für Deine Antwort. Leider war ich zwischenzeitlich vereist:

      Es macht durchaus Sinn zwei Datumsfelder (Datums- und/oder Zeitfelder) zu addieren und miteinander zu vergleichen:
      Schau mal:
      Wenn Du, wie in meinem Fall, eine Vielzahl von Zeitangaben hast z.B.
      Kommt: 11.10.07 14:07:05
      Geht : 11.10.07 15:10:09
      Kommt: 11.10.07 16:09:57
      Geht : 11.10.07 21.59:04

      So kannst du die Datenfelder "Kommt" und "Geht" aufaddieren. Jedes TDateTime-Feld wird intern durch eine Zahl repräsentiert welches ein Datums- und ein Zeitanteil beinhaltet. Mit der function z.B. HourSpan(Expr1001, Expr1002) kannst Du dann die Summe der Zeitdifferenzen recht einfach ermitteln.

      Mache ich dies mit einer Aggregationsfuktion innerhalb der SQL-Anweisung liefert dies u. U. nur wenige Datensätze und ist deshalb manchmal ganz praktisch.

      Hast Du vielleicht ein Beispiel für DATEADD? Ich habe halt von SQL-Server-Datenbanken noch keine große Ahnung und muss eine Applikation von Access auf SQL-Server umstellen! Bisher habe ich meine SQL-Statements (Das kenne ich halt so aus der ERP-System-Programmierung) in der Form geschrieben:
      select feld1, feld2, sum(feld3)
      from table
      where feld1.table = irgendwas
      and feld2.table = irgendwas anderes
      usw.

      Vielen Dank und viele Grüße

      Chrissi

      Comment


      • #4
        Originally posted by Christoph Krieg View Post
        Es macht durchaus Sinn zwei Datumsfelder (Datums- und/oder Zeitfelder) zu addieren und miteinander zu vergleichen:
        Schau mal:
        Du addierst hier keine zwei Datumsfelder sondern du addierst die Differenz zwischen 2 Datumsfeldern. 12h+12h macht Sinn, aber 1.1.2007 + 12.8.2005 macht keinen Sinn.

        Comment


        • #5
          Das müsste so vielleicht gehen, wenn ich das richtig verstanden habe:

          Select SUM(Datediff(hour, date1, date2)) from....

          Datediff gibt einen integer zurück. Der 1. Wert muss vor dem 2. Wert liegen.

          Comment


          • #6
            Danke!

            Hallo Julia,

            vielen herzlichen Dank! Das ist genau das was ich gesucht habe!

            Vielen Dank und viele Grüße

            Christoph

            Comment

            Working...
            X