首頁 > 資料庫 > mysql教程 > 如何在 SQL Server 中將 UNIX 時間戳記轉換為日期時間並處理 2038 年問題?

如何在 SQL Server 中將 UNIX 時間戳記轉換為日期時間並處理 2038 年問題?

Mary-Kate Olsen
發布: 2025-01-17 16:27:10
原創
497 人瀏覽過

How to Convert UNIX Timestamps to DateTime in SQL Server and Handle the Year 2038 Problem?

將 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板