DATEADD と Bigint を使用した算術オーバーフロー エラーの処理
SQL Server の DATEADD 関数は、日付と時刻を操作するための強力なツールです。ただし、大きな整数を扱う場合、算術オーバーフロー エラーが発生する可能性があります。
問題:
ユーザーが次のクエリを使用して JavaScript の日付を SQL の日付に変換しようとしました。 :
DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))
しかし、その結果、例外:
Arithmetic overflow error converting expression to data type int
解決策:
オーバーフロー エラーを回避するには、秒などのより粗い時間単位を使用して、DATEADD 操作をより小さなステップに分割することをお勧めします。または数分を開始点として使用します。これにより、システムはカレンダー計算をより効率的に処理できるようになります。
たとえば、次のクエリはミリ秒の継続時間から開始時刻を計算します。
-- Avoid using weeks or months due to calendar irregularities DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))
このアプローチにより、算術演算が確実に行われます。整数データ型の制限内で実行され、オーバーフロー エラーが防止されます。
以上がSQL Server で Bigint で DATEADD を使用するときに算術オーバーフロー エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。