Excel错误地将日期转换为整数

3
我正在从SQL数据库中提取数据。我有几列日期需要转换为Int类型,但是当我这样做时,日期会改变(-2天)。我尝试了Cast和Convert,结果总是一样。 转换为其他类型可以正常工作并返回正确的日期,但对我没有用。我只需要datetime中的日期部分,并且它需要被Excel识别为日期。 为什么会发生这种情况?有什么办法解决吗? 我正在使用以下查询:
SELECT wotype3, CONVERT(INT,wo_date2 ,103), CAST(duedate AS int) FROM Tasks WHERE 
duedate > DATEADD(DAY,1, GETDATE()) 
AND wo_date2>0
AND wo_date2<DATEADD(WEEK,3,GETDATE())
ORDER BY wotype3

请看"CONVERT(date, DATEADD(day, wo_date2/1440, start_date_in_your_database)) - user2140173
你是如何将数据导出到Excel文件中的? - Pratik
Pratik:我正在使用数据选项卡中的SQL Server连接。 - GRegorious13
2个回答

3
我在检查使用Excel创建的“预期结果”与SQL Server计算结果时遇到了大问题,因为其中有两天的日期差异导致了不一致。
这是为什么呢?原因如下:
1. SQL Server从1900年1月1日开始以零为基础计数日期,而Excel从1900年1月1日开始以1为基础计数日期。 2. Excel存在一个错误(哎呀!),使其认为1900年是闰年。实际上它并不是。SQL Server正确地拒绝让您包含"29-Feb-1900"日期值。
结合这两个差异,这就是为什么所有日期从1900年3月1日起总是相差2天。
显然,这个Excel错误是一个已知问题,为了与Lotus 1-2-3保持一致而保留。 故意的日期错误 微软自己的解释 从现在开始,我想我会用同样的借口来证明我的代码中的错误。
;-)

1

对于SQL Server 2008及以上版本,您可以使用DATE数据类型。

declare @dt datetime = '12/24/2013 10:45 PM'  -- some date for example
SELECT @dt as OriginalDateTime, CAST(@dt as DATE) as OnlyDate

对于SQL Server 2008之前的版本,您需要使用其中一种函数截断时间部分。以下是一种方法:

declare @dt datetime = '12/24/2013 10:45 PM'  -- some date for example
SELECT @dt as OriginalDateTime, CAST(FLOOR(CAST(@dt AS FLOAT)) as DATETIME) as OnlyDate

截断是答案!在Excel 2010中,日期时间字段被视为数字,但日期不是,这就是为什么我不能使用它的原因。将其转换为整数会将日期时间四舍五入到下一个整数,因此值是不正确的。 - GRegorious13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接