ホームページ >データベース >mysql チュートリアル >SQL Server で UNIX タイムスタンプを DateTime に変換し、2038 年問題に対処する方法

SQL Server で UNIX タイムスタンプを DateTime に変換し、2038 年問題に対処する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-17 16:27:10497ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。