Conversion des horodatages UNIX en dates dans SQL Server
De nombreux utilisateurs de SQL Server doivent convertir les horodatages UNIX (stockés en tant que bigint) en valeurs DateTime. Ceci est essentiel lorsque vous travaillez avec des données provenant de systèmes qui utilisent des horodatages UNIX pour représenter les dates et les heures.
Une solution simple :
Une approche courante consiste à utiliser la fonction DATEADD
:
<code class="language-sql">SELECT DATEADD(second, [unixtime], '19700101') FROM [Table]</code>
Ici, « 19700101 » représente l'époque : le 1er janvier 1970, 00:00:00 UTC, le point de départ des horodatages UNIX.
Le problème de l'an 2038 et sa solution :
Le temps de l'époque compte les secondes depuis l'époque. La fonction DATEADD
de SQL Server a cependant une limite entière pour le nombre de secondes. L'ajout de plus de 2 147 483 647 secondes entraîne une erreur de dépassement arithmétique. C'est le "problème de l'année 2038".
Pour gérer les horodatages au-delà de 2038, une solution de contournement consiste à diviser l'ajout en deux DATEADD
opérations :
<code class="language-sql">DECLARE @t BIGINT = 4147483645; DECLARE @oneyear INT = 31622400; -- Approximate seconds in a year SELECT DATEADD(second, @t % @oneyear, DATEADD(year, @t / @oneyear, '19700101'));</code>
Cette méthode calcule d'abord le nombre d'années et de secondes restantes, puis les ajoute séquentiellement, surmontant efficacement la limitation des nombres entiers et permettant la conversion des horodatages bien au-delà de l'année 2038.
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!