【问题标题】:convert decimal serial number from excel to mysql correctly将十进制序列号从excel正确转换为mysql
【发布时间】:2017-08-28 16:24:58
【问题描述】:

我在 Excel csv 中有一个列,其中包含这样的值

42973.74257

我想使用以下方法将其转换为 MySQL 日期时间:

DATE_ADD('1900-01-01', INTERVAL (42973.74257*60*60*24) 秒) 作为日期

但是,它会给我一个不正确的结果

2017-08-28 17:49:18.048000

而正确的结果应该是

2017 年 8 月 26 日下午 5:49:18

结果又增加了 2 天。由于我有大约 100 万行,所以我不知道所有结果是否都不正确。

你们有没有更好的方法将序列号从excel转换为mysql?

谢谢,

H

【问题讨论】:

  • MySQL 日期默认使用 YYYY-MM-DD 格式。您可以使用 DATE_FORMAT() 函数进行不同的格式设置。
  • 为什么你认为这个值相差了两天?当我尝试 MySQL 查询 select to_days('2017-08-28') - to_days('1900-01-01'); 时,我得到 42973。
  • 结果又增加了 2 天。 8/26 和 8/28。所以我不确定查询是否会为整个数据库产生不正确的结果
  • 在保存到 csv 之前尝试将其转换为 Excel 中正确的日期/时间格式如何?
  • 啊,我想我找到了问题:Excel 日期时间值将 1900-01-01 计为值 1,而不是 0。而且 Excel 有一个错误,它认为 1900 年是闰年。这占了这两天的时间。 stackoverflow.com/questions/981655/…

标签: mysql excel datetime typeconverter


【解决方案1】:

你的答案错了两天。

其中一天是因为它实际上将 1900 年 1 月 1 日视为 1,而不是 0 (ref)。

根据this blog post 的说法,由于旧版兼容性原因,Excel 将 1900 年错误地视为闰年,所以它又过了一天。

如果在将值传递到公式之前从值中减去 2,它应该可以工作。

【讨论】:

    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2021-07-02
    • 1970-01-01
    相关资源
    最近更新 更多