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

Bagaimana untuk Mengelakkan Ralat Limpahan Aritmetik Apabila Menggunakan DATEADD dengan Bigints dalam SQL Server?

DDD
DDDasal
2024-12-29 17:29:11243semak imbas

How to Avoid Arithmetic Overflow Errors When Using DATEADD with Bigints in SQL Server?

Mengendalikan Ralat Limpahan Aritmetik dengan DATEADD dan Bigints

Fungsi DATEADD dalam SQL Server ialah alat yang berkuasa untuk memanipulasi tarikh dan masa. Walau bagaimanapun, ia boleh menghadapi ralat limpahan aritmetik apabila bekerja dengan integer besar.

Masalah:

Seorang pengguna cuba menukar tarikh JavaScript kepada tarikh SQL menggunakan pertanyaan berikut :

DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))

Walau bagaimanapun, ia mengakibatkan satu pengecualian:

Arithmetic overflow error converting expression to data type int

Penyelesaian:

Untuk mengelakkan ralat limpahan, adalah disyorkan untuk memecahkan operasi DATEADD kepada langkah yang lebih kecil, menggunakan unit masa yang lebih kasar seperti saat atau minit sebagai titik permulaan. Ini membolehkan sistem mengendalikan pengiraan kalendar dengan lebih cekap.

Sebagai contoh, pertanyaan berikut akan mengira masa mula daripada tempoh milisaat:

-- Avoid using weeks or months due to calendar irregularities

DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))

Pendekatan ini memastikan operasi aritmetik adalah dilakukan dalam had jenis data integer, menghalang ralat limpahan.

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

Kenyataan:
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