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

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

DDD
Libérer: 2025-01-17 16:21:09
original
376 Les gens l'ont consulté

How to Convert UNIX Timestamps to DateTime in SQL Server, Handling the Year 2038 Problem?

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

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

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!

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal