SQL Server : Conversion des horodatages UNIX en DateTime
Ce guide explique comment convertir efficacement les horodatages UNIX (stockés sous bigint
) en type de données DateTime
dans SQL Server, en abordant spécifiquement le potentiel « problème de l'année 2038 ».
Conversion standard
Une méthode simple utilise la fonction DATEADD
:
<code class="language-sql">SELECT DATEADD(SECOND, [unixtime], '19700101') FROM [Table];</code>
Cela exploite l'époque Unix ('1970-01-01 00:00:00 UTC') comme point de départ pour le calcul de l'horodatage.
Résoudre le problème de l'année 2038
Le paramètre DATEADD
de la fonction second
est un int
, limitant sa capacité. Pour gérer les horodatages dépassant la limite int
(le problème de l'année 2038), nous avons besoin d'une approche plus robuste.
Solution : Arithmétique modulaire pour les grands horodatages
La solution consiste à diviser l'addition en années et secondes restantes en utilisant l'arithmétique modulaire :
<code class="language-sql">DECLARE @t BIGINT = 4147483645; DECLARE @oneyear INT = 31622400; -- Approximate seconds in a year SELECT (@t / @oneyear) AS YearsToAdd; -- Number of years SELECT (@t % @oneyear) AS RemainingSeconds; -- Remaining seconds -- Calculate the DateTime SELECT DATEADD(SECOND, @t % @oneyear, DATEADD(YEAR, @t / @oneyear, '19700101'));</code>
Cette méthode gère correctement les horodatages bien au-delà de l'année 2038 en ajoutant d'abord les années puis les secondes restantes. Cela évite les erreurs de dépassement d'entier.
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!