Débordement de DATEADD avec de grands entiers
Les utilisateurs de SQL Server 2008 peuvent rencontrer une « erreur de dépassement arithmétique » lors de la conversion de grandes dates JavaScript en dates SQL à l'aide la fonction DATEADD. L'erreur se produit lorsque la valeur dépasse la taille maximale d'un type de données entier.
La requête incriminée :
DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))
Pour résoudre ce problème, divisez le DATEADD en incréments plus petits. Commencez avec une unité de temps plus grande (secondes, minutes ou heures), puis ajustez en fonction des millisecondes restantes. Évitez d'utiliser des semaines ou des mois car cela implique des calculs de calendrier complexes.
Considérez l'exemple suivant :
-- Handle large durations by subtracting minutes and then remaining milliseconds. DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))
Cette technique permet de calculer des heures de début avec des durées extrêmement longues sans 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!