【问题标题】:How can I convert a OLE Automation Date value to a date in SQL Server如何将 OLE 自动化日期值转换为 SQL Server 中的日期
【发布时间】:2010-07-19 00:10:08
【问题描述】:

我的应用程序将日期存储为 OLE 自动化使用 DateTime.ToOADate() 命令翻倍。

我需要创建一个 SQL 视图来显示存储的日期。如何快速将双精度转换为日期?

【问题讨论】:

  • 根据您对这些列的使用情况,我倾向于将它们存储为 DATETIMEs 而不是双精度数。如果您必须将值显式转换为 DATETIME 进行过滤,则双列上的索引是无用的。

标签: sql sql-server datetime double


【解决方案1】:

SELECT CAST(CASE WHEN OLEFLOAT > 0 THEN 
                         OLEFLOAT-2.0 
                 ELSE 
       2*CAST(OLEFLOAT AS INT) - 2.0 +  ABS(OLEFLOAT) END as datetime)

工作?来自here

实施 OLE 自动化日期 作为一个浮点数,其 积分分量是数 午夜之前或之后的几天,30 1899 年 12 月,其分数 组件代表时间 天除以 24。例如, 1899 年 12 月 31 日午夜是 以 1.0 表示; 1 月 1 日上午 6 点 1900 用 2.25 表示;午夜, 1899 年 12 月 29 日由 -1.0; 1899 年 12 月 29 日上午 6 点用 -1.25 表示。

这听起来很像当您将日期转换为浮点数时 SQL Server 使用的相同系统,除了需要将偏移量调整为 2 和“负”日期。 SQL server 将向后减法。所以 -1.25 是 18:00,而对于 OLE,这意味着 06:00。

【讨论】:

  • 是的,我很笨,在尝试 cast 或 convert 选项之前首先被问到......但现在我遇到了另一个问题。在 MS SQL 2005/8 中,值 1 代表 1900 年 1 月 2 日,所以我所有的日期都是加 2 天!这正常吗?
  • @Nuno 我也发现了。我已经调整了我的帖子。负日期还有另一个轻微的皱纹。我会在几分钟后再次更新。
猜你喜欢
  • 2018-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2019-05-30
相关资源
最近更新 更多