Maison > base de données > tutoriel mysql > SQL Server DATEADD : comment éviter les débordements arithmétiques avec des horodatages entiers volumineux ?

SQL Server DATEADD : comment éviter les débordements arithmétiques avec des horodatages entiers volumineux ?

Mary-Kate Olsen
Libérer: 2024-12-29 11:11:11
original
621 Les gens l'ont consulté

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

Pièges DATEADD liés aux grands nombres entiers

Lorsque vous travaillez avec des horodatages de grands entiers, la fonction DATEADD dans SQL Server peut rencontrer des limitations. Cet article explore un cas spécifique dans lequel une grande valeur entière provoque une erreur de dépassement arithmétique.

Problème

Considérez l'instruction SQL suivante, destinée à convertir un horodatage JavaScript volumineux en une date SQL :

DATEADD(MILLISECOND, cast(569337307200000 as bigint) % 1000, DATEADD(SECOND, cast(569337307200000 as bigint) / 1000, '19700101'))
Copier après la connexion

Sur SQL Server 2008, l'exécution de cette instruction entraîne une "Erreur de débordement arithmétique lors de la conversion de l'expression en type de données int."

Solution

La clé pour surmonter cette erreur réside dans la décomposition de l'opération DATEADD en morceaux plus petits. En ajoutant initialement le temps en unités plus grandes (par exemple, secondes ou minutes), puis en ajoutant les millisecondes restantes, nous pouvons éviter le débordement.

Par exemple, l'instruction suivante calcule l'heure de début pour une durée importante (en millisecondes) :

DATEADD(ms, -large_duration_ms%60000, DATEADD(minute, -large_duration_ms/60000, GETDATE()))
Copier après la connexion

Cet exemple soustrait d'abord les minutes de la grande durée, puis ajoute les millisecondes restantes. Cette approche garantit que les calculs intermédiaires ne débordent pas.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal