將 UNIX 時間戳記轉換為 SQL Server 中的日期
許多 SQL Server 使用者需要將 UNIX 時間戳記(儲存為 bigint)轉換為 DateTime 值。 當處理來自使用 UNIX 時間戳表示日期和時間的系統中的資料時,這一點至關重要。
一個簡單的解決方案:
常見方法涉及使用 DATEADD
函數:
<code class="language-sql">SELECT DATEADD(second, [unixtime], '19700101') FROM [Table]</code>
這裡,「19700101」代表紀元 - 1970 年 1 月 1 日,00:00:00 UTC,UNIX 時間戳的起點。
2038年問題及其解決方案:
紀元時間從紀元開始計算秒數。 然而,SQL Server 的 DATEADD
函式對秒數有整數限制。 增加超過 2,147,483,647 秒會導致算術溢位錯誤。 這就是「2038 年問題」。
要處理超過 2038 年的時間戳,解決方法是將加法分為兩個 DATEADD
操作:
<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>
該方法首先計算年數和剩餘秒數,然後將它們依次相加,有效克服了整數限制,允許轉換遠遠超出2038年的時間戳。
以上是如何在 SQL Server 中將 UNIX 時間戳記轉換為日期時間並處理 2038 年問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!