浏览别人构建的服务器时,我注意到时间以int格式存储。通过插入一些数据,我已经能够进行以下推断:
285571 对应于上午6:51:00(误差在两秒左右)
对于那些询问的人,日期在另一列中以自1900年1月1日以来的天数存储。
问题是:用于时间转换的魔法公式是什么?
谢谢。
浏览别人构建的服务器时,我注意到时间以int格式存储。通过插入一些数据,我已经能够进行以下推断:
285571 对应于上午6:51:00(误差在两秒左右)
对于那些询问的人,日期在另一列中以自1900年1月1日以来的天数存储。
问题是:用于时间转换的魔法公式是什么?
谢谢。
试试这个:
DECLARE @t DATETIME='06:51:00';
SELECT CAST(@t AS FLOAT)
结果
0,285416666666667
DATETIME
被存储为两个4字节整数组合成的8字节结构。第一个整数被视为一天的计数,第二个整数是自午夜以来ticks
的计数器。你可以阅读这篇文章。datetime
作为float
. 整数部分是一天的计数,小数部分是一天的分数。 SQL Server会隐式地将其转换:SELECT CAST(0.5 AS DATETIME)
1900-01-01 12:00:00.000
要获得您的时间(即魔法公式),请按照以下步骤进行:SELECT CAST(0.285571 AS DATETIME)
DECLARE @t INT=285571;
SELECT CAST(CAST('0.' + CAST(@t AS VARCHAR(100)) AS FLOAT) AS DATETIME)
CAST( ... AS TIME)
(根据你的SQL Server版本而定)SELECT CAST(CAST(CAST(@t AS FLOAT)/CAST(POWER(10,CAST(LOG10(@t) AS INT)+1) AS FLOAT) AS DATETIME) AS TIME)
在你的情况下,最好将你的日计数器和时间值用字符串级别的.
结合起来,将其转换为float
,然后将结果转换为datetime
。