Maison > base de données > tutoriel mysql > Comment convertir les horodatages UNIX en DateTime dans SQL Server et gérer le problème de l'année 2038 ?

Comment convertir les horodatages UNIX en DateTime dans SQL Server et gérer le problème de l'année 2038 ?

Mary-Kate Olsen
Libérer: 2025-01-17 16:27:10
original
496 Les gens l'ont consulté

How to Convert UNIX Timestamps to DateTime in SQL Server and Handle the Year 2038 Problem?

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>
Copier après la connexion

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>
Copier après la connexion

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!

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