sql-server - Excel 错误地将 Date 转换为 Int

标签 sql-server excel date

我正在从 SQL 数据库中提取数据。我有几列日期需要转换为 Int 类型,但是当我这样做时,日期会发生变化(-2 天)。我尝试了“转换”和“转换”,结果总是一样。 转换为其他类型工作正常并返回正确的日期,但对我来说不起作用。我只需要日期时间中的日期部分,并且 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

最佳答案

我在这方面遇到了很大的问题,用用户使用 Excel 创建的“预期结果”检查 SQL Server 的计算结果。

仅仅因为这 2 天的日期差异,我们就出现了差异。

为什么会发生这种情况?

两个原因:

  1. SQL Server 使用从 1900 年 1 月 1 日开始的从零开始的日期计数,但 Excel 使用从 1900 年 1 月 1 日开始的从 1 开始的日期计数。

  2. Excel 有一个错误(天哪!),它会认为 1900 年是闰年。事实并非如此。 SQL Server 正确地拒绝让您拥有包含“29-Feb-1900”的日期值。

enter image description here

将这两个差异结合起来,这就是为什么从 1900 年 3 月 1 日起的所有日期总是晚 2 天的原因。

显然,这个 Excel 错误是一个已知问题,以使其与 Lotus 1-2-3 保持一致。

The Intentional Date Bug

Microsoft's own explanation

从现在开始,我想我会用同样的借口来证明我的代码中的错误是合理的。

;-)

关于sql-server - Excel 错误地将 Date 转换为 Int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18981258/

相关文章:

c# - 无法更改 sql server 文件数据库大小

date - 如何配置我的 Postman 模拟服务器响应以始终返回过去两天的日期?

Javascript 和 Java 日期 JSON 序列化

r - 将多列数字数据转换为 R 中的日期

sql - 对于同一行上的每个显示 SQL Server

sql - 如何使用sql将属性添加到xml中的根节点

c# - 执行大量并发 INSERT 时如何避免 "Violation of UNIQUE KEY constraint"

sql - 如何使用 VBA 创建空白的 MS Access 数据库?

excel - 检查 Outlook 中是否存在附件并显示数据

Excel:如何通过列标题引用公式中的整个列?