如何将float列转换为datetime?

时间:2013-07-25 02:37:11

标签: sql-server sql-server-2008

我有一个包含DateField(DataType:Float)

的表
41477.637634537,
41477.6376233333,
41477.637631794

我需要在日期时间YY:MM:DD HH:MM:SS格式

我尝试了ALTER功能

ALTER TABLE HISTORY
    ALTER COLUMN DATETIMESTAMP DATETIME

但是,它返回的那一天是提前一天,虽然时间是正确的。

我想使用

Select * from History
    where Tag LIKE '%tagname%' AND DateTimeStamp > '2013/7/24 14:23:00'

请在我的Alter声明中建议是否有些错误 - 或者是否有更好的方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

看起来您正在使用Excel日期。这些都是从“1900年1月0日”(又名1899-12-31)开始计算的。

您可以通过将值添加到该日期来转换它们:

select cast('1899-12-31' as datetime) + 41477.637634537;

我不知道为什么内置转换会被忽略。

编辑:

在SQL Server 2008上,以下内容返回三个日期和时间:

with t as (
      select 41477.637634537 as col union all
      select 41477.6376233333 union all
      select 41477.637631794
     )
select cast('1899-12-31' as datetime) + col
from t;