SQL Server: Konvertieren von UNIX-Zeitstempeln in DateTime
Diese Anleitung erklärt, wie Sie UNIX-Zeitstempel (gespeichert als bigint
) effizient in den DateTime
-Datentyp in SQL Server konvertieren und geht dabei insbesondere auf das potenzielle „Jahr 2038-Problem“ ein.
Standardkonvertierung
Eine einfache Methode verwendet die Funktion DATEADD
:
<code class="language-sql">SELECT DATEADD(SECOND, [unixtime], '19700101') FROM [Table];</code>
Dies nutzt die Unix-Epoche ('1970-01-01 00:00:00 UTC') als Ausgangspunkt für die Zeitstempelberechnung.
Bewältigung des Jahr-2038-Problems
Der DATEADD
-Parameter der second
-Funktion ist ein int
, der ihre Kapazität begrenzt. Um Zeitstempel zu verarbeiten, die das Limit int
überschreiten (das Jahr-2038-Problem), benötigen wir einen robusteren Ansatz.
Lösung: Modulare Arithmetik für große Zeitstempel
Die Lösung besteht darin, die Addition mithilfe modularer Arithmetik in Jahre und verbleibende Sekunden aufzuteilen:
<code class="language-sql">DECLARE @t BIGINT = 4147483645; DECLARE @oneyear INT = 31622400; -- Approximate seconds in a year SELECT (@t / @oneyear) AS YearsToAdd; -- Number of years SELECT (@t % @oneyear) AS RemainingSeconds; -- Remaining seconds -- Calculate the DateTime SELECT DATEADD(SECOND, @t % @oneyear, DATEADD(YEAR, @t / @oneyear, '19700101'));</code>
Diese Methode verarbeitet Zeitstempel weit über das Jahr 2038 hinaus korrekt, indem zuerst die Jahre und dann die verbleibenden Sekunden addiert werden. Dadurch werden Ganzzahlüberlauffehler vermieden.
Das obige ist der detaillierte Inhalt vonWie konvertiert man UNIX-Zeitstempel in SQL Server in DateTime, um das Jahr-2038-Problem zu lösen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!