Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何将float列转换为datetime?_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql server 如何将float列转换为datetime?

Sql server 如何将float列转换为datetime?,sql-server,sql-server-2008,Sql Server,Sql Server 2008,我有一个包含日期字段的表(数据类型:Float) 但是,它返回的那一天是提前一天的,尽管时间是正确的 然后我想用 Select * from History where Tag LIKE '%tagname%' AND DateTimeStamp > '2013/7/24 14:23:00' 如果我的Alter语句中的某些内容不正确,或者有更好的方法,请提出建议。看起来您使用的是Excel日期。这些数字是从“1900年1月0日”(又名1899-12-31)开始计算的 您可以通过将

我有一个包含日期字段的表(数据类型:Float)

但是,它返回的那一天是提前一天的,尽管时间是正确的

然后我想用

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

如果我的Alter语句中的某些内容不正确,或者有更好的方法,请提出建议。

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

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

select cast('1899-12-31' as datetime) + 41477.637634537;
我不知道为什么内置的转换将是关闭1

编辑:

在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;

IIRC,SQL Server中的内部格式基于1900-01-01,因此,如果您对Excel日期的看法是正确的,那就可以解释off-by-1问题。@JonSeigel。这真的很有道理。令人惊讶的是,同一家公司的两个软件产品可能存在如此重要和微妙的不兼容性。@GordonLinoff谢谢!如何将其推广到整个系统column@user2616868 . . . 将常量
41477.637634537
替换为列的名称。我认为最好的方法是为该值添加一个新列,然后将该值更新到该列。@gordonlinoff我尝试过执行select cast('1899-12-31'作为datetime)+表中的列名称,但它只返回空值重复?
select cast('1899-12-31' as datetime) + 41477.637634537;
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;