Frage

In meinem älteren Beitrag habe ich versucht, das Datum auf das aktuelle Datum zu ändern und 8 Stunden Zeit hinzuzufügen.

SQLServer:konvertieren Sie in heute, dann fügen Sie 8 Stunden hinzu

UPDATE business.dbo.db_schedule
SET nextUpdate= DATEADD(hh, 8,
                DATEADD(d, DATEDIFF(D,nextUpdate,Getdate()),
                          nextUpdate))
where sno=8

beachten: Nächstes Update kann jederzeit in der Vergangenheit sein.

wenn ich noch einen Schritt weiter gehen will;Ich will nächstes Datum in der zukünftigen Zeit zu sein.Denn wenn ich einmal 8 Stunden hinzufüge, kann das Ergebnis noch eine Zeit in der Vergangenheit sein, ich muss möglicherweise noch eine (oder sogar zweimal) hinzufügen, damit das Ergebnis in der Zukunft liegt.Kann ich es in einem Schritt machen?

War es hilfreich?

Lösung

UPDATE business.dbo.db_schedule
SET nextUpdate =
  DATEADD(HOUR
    , 8 * CEILING((DATEDIFF(MILLISECOND, nextUpdate, GETDATE()) / 3600000.) / 8.)
    , nextUpdate)
  )
WHERE sno = 8;

Anstatt nur 8 Stunden zu addieren, multiplizieren wir 8 mit dem CELING von der Anzahl der Stunden auseinander nextUpdate ist von GETDATE()

beispielsweise.Wenn nextUpdate is 2012-10-01 02:30:00 und GETDATE() ist derzeit 2012-10-02 15:15:00, dann gibt es 36,75 (aufgerundet auf 37) Stunden Unterschied.Der CEILING von 37/8 ist 5, was bedeutet, dass Sie 5 * 8 Stunden hinzufügen müssen, um eine Zeit zu erhalten, die danach liegt GETDATE() behält jedoch das Vielfache von 8 Stunden von Ihrem aktuellen nextUpdate Wert.

SQLFiddle Beispiel für die Lösung

Andere Tipps

Ich denke, dass dies zwar viel anzusehen, wird tatsächlich besser funktionieren, da es nur ein paar Berechnungen in einem einzigen Durchgang durch die Daten ist. generasacodicetagpre.

Hinweis: Der letzte wird vereinfacht, indem er 1 Tag in den inneren Ausdruck hinzufügt, anstatt 24 Stunden am äußeren Zugabe zuzusetzen.


ursprüngliche Idee unten

Die Idee erweitert sich auf den vorherigen, mit der Ausnahme, dass wir nicht nur 8 Stunden hinzufügen, alle 8, 16 und 24 als 3 separate Zeilen hinzufügen und die Gruppe mit / min verwenden, um dieeins mit der frühesten Zeit nach der aktuellen Zeit. generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top