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

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

DDD
リリース: 2025-01-17 16:21:09
オリジナル
376 人が閲覧しました

How to Convert UNIX Timestamps to DateTime in SQL Server, Handling the Year 2038 Problem?

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

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