试试这个:
DECLARE @t DATETIME='06:51:00';
SELECT CAST(@t AS FLOAT)
结果
0,285416666666667
您的荒谬值似乎是逗号后面的部分,意思是一天的一小部分。你可以说一整天的 28.54% 之后是 06:51
编辑
感谢 Martin Smith,我必须更正我的“DATETIME 是浮点数”。
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。