Konvertieren von UNIX-Zeitstempeln in Datumsangaben in SQL Server
Viele SQL Server-Benutzer müssen UNIX-Zeitstempel (als Bigint gespeichert) in DateTime-Werte konvertieren. Dies ist wichtig, wenn Sie mit Daten von Systemen arbeiten, die UNIX-Zeitstempel zur Darstellung von Datum und Uhrzeit verwenden.
Eine einfache Lösung:
Ein gängiger Ansatz ist die Verwendung der Funktion DATEADD
:
<code class="language-sql">SELECT DATEADD(second, [unixtime], '19700101') FROM [Table]</code>
Hier stellt „19700101“ die Epoche dar – 1. Januar 1970, 00:00:00 UTC, der Startpunkt für UNIX-Zeitstempel.
Das Jahr-2038-Problem und seine Lösung:
Die Epochenzeit zählt die Sekunden seit der Epoche. Die DATEADD
-Funktion von SQL Server hat jedoch eine Ganzzahlbegrenzung für die Anzahl der Sekunden. Das Hinzufügen von mehr als 2.147.483.647 Sekunden führt zu einem arithmetischen Überlauffehler. Das ist das „Jahr-2038-Problem“.
Um Zeitstempel über 2038 hinaus zu verarbeiten, besteht eine Problemumgehung darin, die Addition in zwei DATEADD
Vorgänge aufzuteilen:
<code class="language-sql">DECLARE @t BIGINT = 4147483645; DECLARE @oneyear INT = 31622400; -- Approximate seconds in a year SELECT DATEADD(second, @t % @oneyear, DATEADD(year, @t / @oneyear, '19700101'));</code>
Diese Methode berechnet zunächst die Anzahl der Jahre und verbleibenden Sekunden und fügt sie dann sequentiell hinzu. Dadurch wird die Ganzzahlbeschränkung effektiv überwunden und die Konvertierung von Zeitstempeln weit über das Jahr 2038 hinaus ermöglicht.
Das obige ist der detaillierte Inhalt vonWie konvertiert man UNIX-Zeitstempel in SQL Server in DateTime und löst das Jahr-2038-Problem?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!