SQL Server: UNIX タイムスタンプを DateTime に変換する
このガイドでは、UNIX タイムスタンプ (bigint
として保存) を SQL Server 内で DateTime
データ型に効率的に変換する方法について説明し、特に潜在的な「2038 年問題」に対処します。
標準変換
簡単な方法では、DATEADD
関数を使用します。
<code class="language-sql">SELECT DATEADD(SECOND, [unixtime], '19700101') FROM [Table];</code>
これは、タイムスタンプ計算の開始点として Unix エポック ('1970-01-01 00:00:00 UTC') を利用します。
2038 年問題への対処
DATEADD
関数の second
パラメータは int
であり、その容量が制限されています。 int
制限 (2038 年問題) を超えるタイムスタンプを処理するには、より堅牢なアプローチが必要です。
解決策: 大きなタイムスタンプのモジュラー演算
この解決策には、モジュラー演算を使用して加算を年と残りの秒に分割することが含まれます。
<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>
このメソッドは、最初に年を加算し、次に残りの秒を加算することにより、2038 年をはるかに超えるタイムスタンプを正しく処理します。 これにより、整数オーバーフロー エラーが回避されます。
以上がSQL Server で UNIX タイムスタンプを DateTime に変換し、2038 年問題に対処する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。