Maison >base de données >tutoriel mysql >Comment éviter les erreurs de dépassement arithmétique lors de l'utilisation de DATEADD avec de gros Bigints ?

Comment éviter les erreurs de dépassement arithmétique lors de l'utilisation de DATEADD avec de gros Bigints ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-05 10:47:40328parcourir

How to Avoid Arithmetic Overflow Errors When Using DATEADD with Large Bigints?

Surmonter le débordement arithmétique dans DATEADD avec Bigints

Rencontrer des erreurs de débordement arithmétique lors de l'utilisation de DATEADD avec de grandes valeurs bigint peut être frustrant. Pour résoudre ce problème, une solution de contournement appropriée consiste à effectuer l'opération DATEADD en plusieurs étapes, en commençant par une unité de temps plus grossière comme les secondes ou les minutes.

Comme souligné dans une erreur rencontrée, ajouter directement une valeur bigint trop grande à une expression de date peut déclencher une erreur de dépassement arithmétique. Pour surmonter cela, nous pouvons décomposer l'opération en étapes plus petites :

  1. Soustrayez d'abord l'unité de temps la plus grande : Déterminez le nombre de secondes ou de minutes contenues dans la valeur bigint à l'aide de calculs modulo . Soustrayez cette valeur de l'expression de date.
  2. Ajoutez une unité de temps plus fine : Utilisez DATEADD pour ajouter les millisecondes restantes au résultat obtenu à l'étape 1.

Pour exemple, pour calculer une heure de démarrage étant donné une durée de courant importante (millisecondes) :

DECLARE @large_duration_ms BIGINT = 569337307200000;

-- Step 1: Subtract minutes (60000ms)
-- (a) Determine number of minutes
DECLARE @minutes_to_subtract BIGINT = @large_duration_ms / 60000;

-- (b) Subtract minutes
DECLARE @start_time_minutes DATETIME = DATEADD(MINUTE, -@minutes_to_subtract, GETDATE());

-- Step 2: Add remaining milliseconds
DECLARE @milli_seconds_to_add BIGINT = @large_duration_ms % 60000;
DECLARE @start_time_final DATETIME = DATEADD(MILLISECOND, @milli_seconds_to_add, @start_time_minutes);

SELECT @start_time_final;

En utilisant cette méthode en plusieurs étapes approche, nous pouvons éviter les erreurs potentielles de débordement et calculer avec précision les dates à partir de grandes valeurs bigint.

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!

Déclaration:
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