2010-07-19 53 views
9

我的应用程序存储日期为OLE自动化与DateTime.ToOADate()命令一起加倍。如何将OLE自动化日期值转换为SQL Server中的日期

现在,我需要创建一个SQL视图,它显示我存储的日期。我如何快速将双重转换为日期?

感谢

+2

根据您对这些列的使用情况,我倾向于将它们存储为DATETIME而不是双打。如果您必须将该值显式转换为DATETIME进行过滤,则双列上的索引是无用的。 – 2010-07-19 00:17:48

回答

9

是否

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;早上6点,1月1日 1900代表2.25;午夜, 1899年12月29日由 -1.0代表;和上午6点,1899年12月29日由-1.25表示。

这听起来非常像SQL Server在将日期转换为浮点型时所用的系统,除了需要用2来调整偏移量以及“负”日期。 SQL服务器将向后减。因此-1.25是18:00,而OLE则意味着06:00。

+0

是的,我是愚蠢的,并试图在演员阵容或转换选项之前首先问....但现在我有另一个问题。在MS SQL 2005/8中,值1代表1900年1月2日,所以我所有的日期都是加2天!这是正常的吗? – 2010-07-19 00:24:21

+0

@Nuno我也发现。我调整了我的帖子。消极的日期还有另一个轻微的皱纹。我会在几分钟后再次更新。 – 2010-07-19 00:29:26

相关问题