Gestion des erreurs de dépassement arithmétique avec DATEADD et Bigints
La fonction DATEADD dans SQL Server est un outil puissant pour manipuler les dates et les heures. Cependant, il peut rencontrer des erreurs de dépassement arithmétique lorsque vous travaillez avec de grands entiers.
Problème :
Un utilisateur a tenté de convertir une date JavaScript en date SQL à l'aide de la requête suivante. :
DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))
Cependant, cela a abouti à un exception :
Arithmetic overflow error converting expression to data type int
Solution :
Pour éviter l'erreur de débordement, il est recommandé de diviser l'opération DATEADD en étapes plus petites, en utilisant des unités de temps plus grossières comme les secondes ou minutes comme point de départ. Cela permet au système de gérer les calculs du calendrier plus efficacement.
Par exemple, la requête suivante calculera une heure de début à partir d'une durée d'une milliseconde :
-- Avoid using weeks or months due to calendar irregularities DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))
Cette approche garantit que les opérations arithmétiques sont effectué dans les limites du type de données entier, évitant ainsi les erreurs de débordement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!