通过其他人构建的服务器,我注意到时间以int格式存储。通过插入一些数据,我可以进行以下扣除:
285571对应于上午6:51:00(加减去2秒)
对于那些提出要求的人,日期以自19/1年1月1日以来的日期存储在另一列中。
问题是:用于时间转换的神奇公式是什么?
谢谢。
答案 0 :(得分:6)
试试这个:
DECLARE @t DATETIME='06:51:00';
SELECT CAST(@t AS FLOAT)
结果
0,285416666666667
你的荒谬价值似乎是逗号之后的部分,意思是一天中的一小部分。你可以说在一整天的28.54%之后它是06:51
对马丁史密斯来说,我必须纠正我的" DATETIME是FLOAT"。
实际上,DATETIME
被存储为两个4字节整数组合成一个8字节结构。第一个int作为一天的计数,第二个是从午夜开始的ticks
计数器。您可以阅读this。
另一个常见的表示(我认为这对VB(A),Access和相关系统有效)是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