我在PHP中处理SQL Server数据库转储时遇到问题。
我有一个名为datatime
的列,其值为:
0x0000a0af00d7f2eb
我需要在PHP中提取此列的日期和时间值。我没有SQL Server可用,因此我无法使用CAST(0x0000a0af00d7f2eb AS datetime)
的明显解决方案。
有人告诉我这个十六进制:0000a0af00d7f2eb
由4个字节的日期和4个字节的时间创建。
所以我知道:
当我将0000a0af
(前4个字节)更改为十进制时,我将获得从1900年开始的天数。这很好。
但是当我试图改变最后4个字节时(所以应该有时间):00d7f2eb
到十进制我得到了一些我无法理解的东西。它应该是从午夜开始的时间(以毫秒为单位),有时这个值会低约3倍。
有人可以帮助将0000a0af00d7f2eb
转换为日期吗?我知道时间是在凌晨5点到晚上11点之间,那一天是在上周。
答案 0 :(得分:2)
根据Rene链接的另一个问题中的linked article,SQL Server在第二组4个字节中存储3.33毫秒的间隔,而不是毫秒。因此,如果你用毫秒计算,你的确会得到大约1/3的时间。使用您的示例,让我们从转换为十进制开始
00d7f2eb - > 14152427 3.3ms间隔
现在乘以3.3转换为毫秒,除以1000得到秒
14152427 * 3.3 / 1000~47127.58
所以这代表午夜后约47,000秒。一小时除以3600秒
47127.58 / 3600~13.091
因此,这表示午夜后约13.1小时的时间,这与在SQL Server中完成的转换结果一致。
答案 1 :(得分:0)
select CAST(0x0000a0af00d7f2eb AS datetime) as t
对我来说很好。并返回'2012年8月16日13:06:14-0700'。