【问题标题】:How to convert datetime (SQL Server) into Excel datetime?如何将日期时间(SQL Server)转换为 Excel 日期时间?
【发布时间】:2018-03-23 14:59:27
【问题描述】:

问题:我想将SQL Server的datetime转换成Excel日期时间格式。

示例 1:从 2018-08-23 15:32:32.00043335,65

示例 2:从 1985-03-26 10:35:42.00031132,44

我尝试过的:受this 答案的启发,我尝试了这个查询

SELECT DATEDIFF(day, @MyDatetime, GETDATE())

如果您想转换日期(不包括小时),这可行,但如何转换时间呢?

在Excel中,时间保存在数字的小数部分,所以我尝试使用

SELECT DATEDIFF(SECOND, '1899/12/30 00:00:00.000', GETDATE())

但这会导致溢出错误。

datediff 函数导致溢出。分隔两个日期/时间实例的日期部分的数量太大。尝试将 datediff 与不太精确的日期部分一起使用。

【问题讨论】:

  • 您使用的是什么版本的 SQL?
  • @JuValencia 我正在使用 SQL 12.0.2000 (2014)

标签: sql sql-server excel datetime datetime-conversion


【解决方案1】:

将您的 DATETIME 转换为 FLOAT 并添加 2

示例

Declare @D datetime = '2018-08-23 15:32:32.000'

Select cast(@D as float)+2

退货

43335.6475925926

【讨论】:

  • @user1443098 只是站在巨人的肩膀上。谢谢你的笑容:)
  • @user1443098 老实说,以前一直走这条路。转换为浮点数的日期的 int 部分是天,而小数部分本质上是一天的百分比
  • @user1443098 有趣的部分是您可以将浮点数转换为日期时间 Select cast(43335.6475925926 as datetime)
【解决方案2】:

你可以使用CAST:

select CAST(GETDATE() as float)+2

日期在 Excel 中的工作原理: https://www.excelcampus.com/functions/how-dates-work-in-excel/

基本上任何日期都可以存储为自 1900 年 1 月 1 日以来的天数。时间是小数值,等于 (number_of_seconds_since_midnight)*(1/(24*60*60))

需要添加 2 天作为 Excel 和 SQL 从不同开始日期算起的天数。

希望这一切都有意义。

【讨论】:

    【解决方案3】:

    我只是从数据库中获取日期并让 Excel 转换它。这样,如果 Excel 改变了它的内部表示,你的 SQL 代码就不必改变

    【讨论】:

    • 不幸的是,我在我的 SQL Server 数据库中需要这种格式,当我在报告中读/写时,我不能让 Excel 转换。
    猜你喜欢
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 1970-01-01
    • 2021-05-27
    • 2011-08-29
    • 2019-03-07
    相关资源
    最近更新 更多