首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换的MySQL代码

问转换的MySQL代码
EN

Stack Overflow用户
提问于 2015-10-14 12:15:32
回答 3查看 5.7K关注 0票数 3

Excel的日期时间值看起来类似于42291.60493,这意味着MySQL将它们看作字符串而不是日期。是否有MySQL代码可以将它们转换为MySQL日期时间?(即like in MS SQL)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-10-14 12:40:10

我能想到两种解决方案:

  1. 使用excel中的text()函数将excel中的日期转换为符合mysql日期和时间格式的格式化日期字符串。
  2. 在mysql中转换使用计算到目前为止的数字:

(以下词语可简化)

代码语言:javascript
复制
select date_add(date_add(date('1899-12-31'), interval floor(@datefromexcel) day), interval floor(86400*(@datefromexcel-floor(@datefromexcel))) second)
票数 2
EN

Stack Overflow用户

发布于 2015-10-14 12:20:07

Excel将日期时间存储为1899-12-31日的天数.Unix存储自1970-01-01年以来的秒数,但只允许非负值.

所以,在约会中,你可以

代码语言:javascript
复制
select date_add(date('1899-12-31'), interval $Exceldate day )

这不适用于小数天。但是,对于unix约会时间,这将是一个很好的选择:

代码语言:javascript
复制
select $ExcelDate*24*60*60 + unix_timstamp('1899-12-31')

但是负值是有问题的。所以,这需要这样的东西:

代码语言:javascript
复制
select ($ExcelDate - datediff('1899-12-31', '1970-01-01')) * 24*60*60

也就是说,只需计算自Unix截止日期以来的秒数。注意:这假设日期是在1970-01-01之后,因为MySQL不理解unix截止日期之前的日期。

票数 2
EN

Stack Overflow用户

发布于 2021-05-24 21:50:54

Excel日期值表示1899-12-30天的天数.产生奇数的原因是Excel引入时需要与Lotus1-2-3兼容。Lotus1-2-3日差计算错误地假设1900年是闰年,增加了额外的一天.为了兼容性,微软复制了这个bug。(https://learn.microsoft.com/en-us/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year)

使用正确的值,计算将如上面所述的@Shadow所示。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33125037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档