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
Lepaskan: 2024-12-29 17:29:11
asal
220 orang telah melayarinya

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

Walau bagaimanapun, ia mengakibatkan satu pengecualian:

Arithmetic overflow error converting expression to data type int
Salin selepas log masuk

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan