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

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

Mary-Kate Olsen
リリース: 2025-01-17 16:27:10
オリジナル
496 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート