sql-server - 如何将浮点列转换为日期时间?

标签 sql-server sql-server-2008

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

41477.637634537,
41477.6376233333,
41477.637631794

I need this in datetime YY:MM:DD HH:MM:SS format

I tried the ALTER function

ALTER TABLE HISTORY
    ALTER COLUMN DATETIMESTAMP DATETIME

但是,尽管时间是正确的,但它返回的日期却提前了一天。

我想然后使用

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;

关于sql-server - 如何将浮点列转换为日期时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17848074/

相关文章:

sql-server - 表中的 SQL ID 将相同的 ID 发布到每个事务的所有其他 Coldfusion 条目

c# - 读取数组或列表中的 SQL Server 列

sql - 遍历表格的每一列

sql - sql server 中的无符号右移 '>>>' 运算符

sql - 如何在 SQL Server 2008 中添加引用自身的外键?

sql-server - SQL Server 中的唯一行约束

java - Statement.setFetchSize(nSize) 方法在 SQL Server JDBC 驱动程序中的真正作用是什么?

sql-server - 将数据库表从一个 SQL Server 数据库表更新到另一个?

sql-server-2008 - 从 SQL Server 2008 到 SQL Azure 的导入和导出向导

sql-server - 当前在存储过程中运行查询