Heim > Datenbank > MySQL-Tutorial > SQL Server DATEADD: Wie vermeide ich einen arithmetischen Überlauf mit großen ganzzahligen Zeitstempeln?

SQL Server DATEADD: Wie vermeide ich einen arithmetischen Überlauf mit großen ganzzahligen Zeitstempeln?

Mary-Kate Olsen
Freigeben: 2024-12-29 11:11:11
Original
627 Leute haben es durchsucht

SQL Server DATEADD: How to Avoid Arithmetic Overflow with Large Integer Timestamps?

DATEADD-Fallstricke bei großen Ganzzahlen

Beim Arbeiten mit großen Ganzzahl-Zeitstempeln kann die DATEADD-Funktion in SQL Server auf Einschränkungen stoßen. In diesem Artikel wird ein konkreter Fall untersucht, bei dem ein großer ganzzahliger Wert einen arithmetischen Überlauffehler verursacht.

Problem

Betrachten Sie die folgende SQL-Anweisung, die dazu gedacht ist, einen großen JavaScript-Zeitstempel in zu konvertieren ein SQL-Datum:

DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))
Nach dem Login kopieren

Auf SQL Server 2008 führt die Ausführung dieser Anweisung zu einem „Arithmetic Überlauffehler beim Konvertieren des Ausdrucks in den Datentyp int.“

Lösung

Der Schlüssel zur Behebung dieses Fehlers liegt in der Aufteilung der DATEADD-Operation in kleinere Teile. Indem wir zunächst die Zeit in größeren Einheiten (z. B. Sekunden oder Minuten) hinzufügen und dann die verbleibenden Millisekunden hinzufügen, können wir den Überlauf vermeiden.

Zum Beispiel berechnet die folgende Anweisung die Startzeit bei einer großen Dauer (in Millisekunden):

DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))
Nach dem Login kopieren

In diesem Beispiel werden zunächst die Minuten von der großen Dauer subtrahiert und dann die verbleibenden Millisekunden addiert. Dieser Ansatz stellt sicher, dass die Zwischenberechnungen nicht überlaufen.

Das obige ist der detaillierte Inhalt vonSQL Server DATEADD: Wie vermeide ich einen arithmetischen Überlauf mit großen ganzzahligen Zeitstempeln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage