Microsoft Hex日期

时间:2011-09-28 08:58:21

标签: postgresql datetime type-conversion

我在Microsoft SQL Server数据库中有以下日期/时间值:

0x00009CEF00A25634

我发现这篇文章: Help me translate long value, expressed in hex, back in to a date/time

这似乎是在正确的轨道,但通过使用我没有得到正确日期的代码,我的十六进制日期是否以不同的格式?我如何将它们转换为正常日期,我正在使用PHP / PostgreSQL。

2 个答案:

答案 0 :(得分:8)

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

这是两个整数。一个用于日期部分0x00009CEF(十进制40175),一个用于时间部分00A25634(十进制10638900)。日期部分是一个有符号整数,给出自1900年1月1日以来的天数。时间部分是一个表示刻度数的整数。

一秒钟内有300个滴答声。

可以看出,以下内容也会返回相同的结果

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

您需要弄清楚如何将其应用于postgres

编辑:答案here显然是这样做的。我自己没有测试过。

答案 1 :(得分:0)

这在从SQL迁移到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