【问题标题】:Excel incorrectly converts Date into IntExcel 错误地将 Date 转换为 Int
【发布时间】:2013-09-24 12:10:26
【问题描述】:

我正在从 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))
  • 如何将数据导出到 excel 文件中?
  • Pratik:我正在使用“数据”选项卡中的 SQL Server 连接。

标签: sql-server excel date


【解决方案1】:

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

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

为什么会这样?

两个原因:

  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 保持一致。

The Intentional Date Bug

Microsoft's own explanation

从现在开始,我想我会以同样的理由为我的代码中的错误辩护。

;-)

【讨论】:

    【解决方案2】:

    对于 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 中,日期时间字段被视为数字,但日期 - 不是,这就是我无法使用它的原因。转换为 Int 会将 Datetime 舍入为下一个整数,因此值不正确。
    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 2020-07-08
    • 2016-01-22
    • 2014-06-05
    • 2020-08-24
    • 2017-08-20
    • 1970-01-01
    • 2020-07-24
    相关资源
    最近更新 更多