ホームページ > データベース > mysql チュートリアル > 大きな Bigint で DATEADD を使用するときに算術オーバーフロー エラーを回避するにはどうすればよいですか?

大きな Bigint で DATEADD を使用するときに算術オーバーフロー エラーを回避するにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-05 10:47:40
オリジナル
359 人が閲覧しました

How to Avoid Arithmetic Overflow Errors When Using DATEADD with Large Bigints?

Bigint を使用した DATEADD の算術オーバーフローの克服

大きな bigint 値で DATEADD を使用するときに算術オーバーフロー エラーが発生すると、イライラすることがあります。この問題を解決するには、DATEADD 操作を複数の手順で実行し、秒や分などのより粗い時間単位から開始することが適切な回避策です。

発生したエラーで強調されているように、大きすぎる bigint 値を直接追加すると、日付式は算術オーバーフロー エラーを引き起こす可能性があります。これを解決するには、操作を小さなステップに分割します。

  1. 最初に大きな時間単位を減算します。 モジュロ計算を使用して、bigint 値に含まれる秒数または分数を決定します。 。日付式からこの値を減算します。
  2. より細かい時間単位を追加します: DATEADD を使用して、手順 1 で取得した結果に残りのミリ秒を追加します。

の場合たとえば、大きな電流持続期間を考慮して開始時間を計算する場合(ミリ秒):

DECLARE @large_duration_ms BIGINT = 569337307200000;

-- Step 1: Subtract minutes (60000ms)
-- (a) Determine number of minutes
DECLARE @minutes_to_subtract BIGINT = @large_duration_ms / 60000;

-- (b) Subtract minutes
DECLARE @start_time_minutes DATETIME = DATEADD(MINUTE, -@minutes_to_subtract, GETDATE());

-- Step 2: Add remaining milliseconds
DECLARE @milli_seconds_to_add BIGINT = @large_duration_ms % 60000;
DECLARE @start_time_final DATETIME = DATEADD(MILLISECOND, @milli_seconds_to_add, @start_time_minutes);

SELECT @start_time_final;
ログイン後にコピー

この複数ステップのアプローチを使用すると、潜在的なオーバーフロー エラーを回避し、大きな bigint 値から日付を正確に計算できます。

以上が大きな Bigint で DATEADD を使用するときに算術オーバーフロー エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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