ミリ秒レベルの Unix タイムスタンプ、日時形式に変換、エラー、「式をデータ型 int に変換するときに算術オーバーフロー エラーが発生しました」

Unix タイムスタンプをミリ秒単位で表すタイムスタンプ値 1689217823000 がある場合、それを日時形式に変換できます。SQL Server では、DATEADD 関数と CONVERT 関数を使用して変換できます。
そのタイムスタンプ値を日時形式に変換する手順は次のとおりです:
DECLARE @timestamp bigint = 1689217823000;
DECLARE @datetime datetime;

SET @datetime = DATEADD(ms, @timestamp, '1970-01-01T00:00:00');
SET @datetime = DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), GETDATE()), @datetime); - - タイムゾーンの違いを考慮します

@datetime AS Converted_datetime を選択します。

この例では、まず変数 @timestamp を宣言し、それをタイムスタンプ値に設定します。次に、DATEADD 関数を使用して、ミリ秒レベルのタイムスタンプを Unix タイムスタンプの開始日 (1970 年 1 月 1 日) に追加し、変換された日時値を取得します。
タイム ゾーンの違いを考慮するために、DATEADD 関数と DATEDIFF 関数を使用して、現在のタイム ゾーンの時刻と一致するように datetime 値を調整します。
最後に、変換された日時値 @datetime が SELECT ステートメントを介して返されます。
タイムゾーンは重要な要素であることに注意してください。変換中に適切なタイムゾーン調整が考慮されていることを確認してください。実際のタイムゾーンの状況に応じて、対応する調整を行うことができます。

上記の例を実行してエラーを報告します。

 

「式をデータ型 int に変換するときに算術オーバーフロー エラーが発生しました」の解決方法は?

この問題を解決する別の方法を試してみましょう。

1. まず、タイムスタンプ値を bigint 型に変換します。タイムスタンプ値が 1689217823000 であると仮定します。

DECLARE @timestamp bigint = 1689217823000;


2. 次に、変換されたタイムスタンプ値を 1000 で割って、秒単位のタイムスタンプを取得します。

SET @タイムスタンプ = @タイムスタンプ / 1000;


3. 次に、変換された第 2 レベルのタイムスタンプ値を開始日 (1970 年 1 月 1 日) に加算して、対応する日時値を取得します。

DECLARE @datetime datetime = DATEADD(ss, @timestamp, '1970-01-01T00:00:00');


4. 最後に、タイムゾーンの違いを考慮して日時値を調整できます。タイムゾーンに応じて、次のコードを使用して調整できます。

SET @datetime = DATEADD(HOUR, DATEDIFF(HOUR,GETUTCDATE(),CURRENT_TIMESTAMP), @datetime);

これは、タイムゾーンが現在のシステムのタイムゾーンであることを前提としていることに注意してください。ニーズが現​​在のタイム ゾーンに基づいておらず、特定のタイム ゾーンに調整される場合は、それに応じて上記のコードを変更する必要があります。
最後に、SELECT ステートメントを使用して、変換された日時値を確認できます。
SELECT @datetime as Converted_datetime;

このメソッドは、算術オーバーフロー エラーを発生させることなく、タイムスタンプ値を日時形式に正常に変換する必要があります。

おすすめ

転載: blog.csdn.net/qq1507171150/article/details/131793428