Rumah > pangkalan data > tutorial mysql > SQL Server DATEADD: Bagaimana untuk Mengelakkan Limpahan Aritmetik dengan Cap Masa Integer Besar?

SQL Server DATEADD: Bagaimana untuk Mengelakkan Limpahan Aritmetik dengan Cap Masa Integer Besar?

Mary-Kate Olsen
Lepaskan: 2024-12-29 11:11:11
asal
622 orang telah melayarinya

SQL Server DATEADD: How to Avoid Arithmetic Overflow with Large Integer Timestamps?

Perangkap DATEADD dengan Integer Besar

Apabila bekerja dengan cap masa integer yang besar, fungsi DATEADD dalam SQL Server boleh menghadapi pengehadan. Artikel ini meneroka kes khusus di mana nilai integer yang besar menyebabkan ralat limpahan aritmetik.

Masalah

Pertimbangkan pernyataan SQL berikut, bertujuan untuk menukar cap waktu JavaScript yang besar kepada tarikh SQL:

DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))
Salin selepas log masuk

Pada SQL Server 2008, melaksanakan pernyataan ini menghasilkan "Ralat limpahan aritmetik menukar ungkapan kepada int jenis data."

Penyelesaian

Kunci untuk mengatasi ralat ini terletak pada memecahkan operasi DATEADD kepada bahagian yang lebih kecil. Dengan menambahkan masa dalam unit yang lebih besar pada mulanya (cth., saat atau minit) dan kemudian menambahkan baki milisaat, kita boleh mengelakkan limpahan.

Sebagai contoh, penyataan berikut mengira masa mula diberi tempoh yang besar (dalam milisaat):

DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))
Salin selepas log masuk

Contoh ini menolak minit daripada tempoh yang besar dahulu, kemudian menambah milisaat yang tinggal. Pendekatan ini memastikan pengiraan perantaraan tidak melimpah.

Atas ialah kandungan terperinci SQL Server DATEADD: Bagaimana untuk Mengelakkan Limpahan Aritmetik dengan Cap Masa Integer 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