我的应用程序存储日期,因为OLE Automation使用该DateTime.ToOADate()命令将其加倍。
DateTime.ToOADate()
我需要创建一个SQL视图,该视图向我显示存储的日期。如何快速将Double转换为日期?
做
SELECT CAST(CASE WHEN OLEFLOAT > 0 THEN OLEFLOAT-2.0 ELSE 2*CAST(OLEFLOAT AS INT) - 2.0 + ABS(OLEFLOAT) END as datetime)
工作?从这里
OLE自动化日期被实现为浮点数,其整数部分是1899年12月30日午夜之前或之后的天数,其小数部分代表该天的时间除以24。例如,12月31日午夜1.0代表1899;1900年1月1日上午6点以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。