Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengelakkan Ralat Limpahan Aritmetik Apabila Menggunakan DATEADD dengan Bigints Besar?

Bagaimana untuk Mengelakkan Ralat Limpahan Aritmetik Apabila Menggunakan DATEADD dengan Bigints Besar?

Linda Hamilton
Lepaskan: 2025-01-05 10:47:40
asal
358 orang telah melayarinya

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

Mengatasi Limpahan Aritmetik dalam DATEADD dengan Bigints

Menghadapi ralat limpahan aritmetik apabila menggunakan DATEADD dengan nilai bigint yang besar boleh mengecewakan. Untuk menyelesaikan isu ini, penyelesaian yang sesuai ialah melakukan operasi DATEADD dalam berbilang langkah, bermula dengan unit masa yang lebih kasar seperti saat atau minit.

Seperti yang diserlahkan dalam ralat yang dihadapi, secara langsung menambah nilai yang terlalu besar pada ungkapan tarikh boleh mencetuskan ralat limpahan aritmetik. Untuk mengatasinya, kita boleh memecahkan operasi kepada langkah yang lebih kecil:

  1. Tolak unit masa yang lebih besar dahulu: Tentukan bilangan saat atau minit yang terkandung dalam nilai bigint menggunakan pengiraan modulo . Tolak nilai ini daripada ungkapan tarikh.
  2. Tambah unit masa yang lebih halus: Gunakan DATEADD untuk menambah baki milisaat pada hasil yang diperoleh dalam langkah 1.

Untuk contoh, untuk mengira masa mula diberi tempoh semasa yang besar (milisaat):

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;
Salin selepas log masuk

Dengan menggunakan ini pendekatan berbilang langkah, kita boleh mengelakkan kemungkinan ralat limpahan dan mengira tarikh dengan tepat daripada nilai bigint yang besar.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Ralat Limpahan Aritmetik Apabila Menggunakan DATEADD dengan Bigints Besar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan