SQL Server での UNIX タイムスタンプの日付への変換
多くの SQL Server ユーザーは、UNIX タイムスタンプ (bigint として保存) を DateTime 値に変換する必要があります。 これは、日付と時刻を表すために UNIX タイムスタンプを使用するシステムのデータを扱う場合に不可欠です。
簡単な解決策:
一般的なアプローチには、DATEADD
関数の使用が含まれます。
<code class="language-sql">SELECT DATEADD(second, [unixtime], '19700101') FROM [Table]</code>
ここで、「19700101」はエポック (UNIX タイムスタンプの開始点である 1970 年 1 月 1 日、00:00:00 UTC) を表します。
2038 年問題とその解決策:
エポック時間は、エポックからの秒数をカウントします。 ただし、SQL Server の DATEADD
関数には秒数の整数制限があります。 2,147,483,647 秒を超えると算術オーバーフロー エラーが発生します。 これが「2038年問題」です。
2038 を超えるタイムスタンプを処理するには、加算を 2 つの 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 タイムスタンプを DateTime に変換し、2038 年問題に対処する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。