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:
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;
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!