4 votes

Dates Microsoft Hex

J'ai les données suivantes provenant d'une base de données Microsoft SQL Server pour les valeurs de date et d'heure :

0x00009CEF00A25634

J'ai trouvé cet article : Aidez-moi à traduire une valeur longue, exprimée en hexadécimal, en une date/heure.

Ce qui semblait être sur la bonne voie mais en utilisant le code je n'ai pas obtenu les bonnes dates, est-ce que mes dates hexagonales sont dans un format différent ? Comment les convertir en date normale, j'utilise PHP/PostgreSQL.

8voto

Martin Smith Points 174101

select CAST (0x00009CEF00A25634 as datetime) donne 2009-12-30 09:51:03.000

Il s'agit de deux nombres entiers. Un pour la partie date 0x00009CEF (décimale 40175) et un pour la partie temporelle 00A25634 (décimal 10638900). La partie date est un nombre entier signé indiquant le nombre de jours écoulés depuis le 1er janvier 1900. La partie temps est un entier représentant le nombre de ticks.

Il y a 300 tics par seconde.

On peut constater que la méthode suivante donne le même résultat

SELECT DATEADD(MILLISECOND,10638900*10/3.0, DATEADD(DAY,40175, '19000101'))

Vous devrez trouver un moyen d'appliquer cela aux postgres .

Edit : une réponse aquí semble le faire. Je ne l'ai pas testé moi-même.

-1voto

Cela fonctionne pour moi lors de la migration de SQL vers MySQL :

SELECT (CAST('1900-01-01 00:00:00' + INTERVAL CAST(CONV(substr(HEX( 0x0000A249004576D0 ),1,8), 16, 10) AS SIGNED) DAY + INTERVAL CAST(CONV(substr(HEX( 0x0000A249004576D0 ),9,8), 16, 10) AS SIGNED)* 10000/3 MICROSECOND AS DATETIME)) AS newdate

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X