我在Microsoft SQL Server数据库中有以下日期/时间值:
0x00009CEF00A25634
我发现这篇文章: Help me translate long value, expressed in hex, back in to a date/time
这似乎是在正确的轨道,但通过使用我没有得到正确日期的代码,我的十六进制日期是否以不同的格式?我如何将它们转换为正常日期,我正在使用PHP / PostgreSQL。
答案 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