【问题标题】:Convert 5 digit number to date将 5 位数字转换为日期
【发布时间】:2015-02-25 22:03:10
【问题描述】:

我提前道歉,因为我确信这个问题之前已经被问过,但我不知道我正在处理的日期类型的名称。

如何在 SQL Server 中将这种 5 位数形式的日期(例如 41867)转换为常规的 yyyy-dd-mm?

【问题讨论】:

  • 那么这个数字 41867 是如何转换成日期的呢?
  • 这些纪元日期来自 linux 吗? 41867 应该是什么日期??
  • 这看起来像 Excel 序列日期 - 自 1900 年 1 月 1 日以来的天数。还有另一种格式,即 2 位数年份后跟 3 位数日期编号(例如,99001 是 1999 年 1 月 1 日),但 OP 的示例不适用于该格式
  • “41687”是来自 Excel 并代表日期“2014-08-16”吗?然后SELECT DATEADD(DAY, 41867, '18991230') 应该做你想做的事。可能会转换为DATE
  • 根据下面的@benjaminmoskovits,如果起点是 1900-01-01,那么该日期可能是“2014-08-18”。我只是在 Excel 中输入“41867”并将其显示为日期;结果是“2014-08-16”。这并不完全科学。这就是为什么您需要知道该值来自何处以及它代表什么。

标签: sql sql-server


【解决方案1】:

这种 5 位数字格式称为 msdate,它从 1900 年 1 月 1 日开始。将其转换为标准日期的最简单方法是,

select convert(datetime, 44321) - 2 

【讨论】:

    【解决方案2】:

    SQL Server 将日期存储为自 1900 年 1 月 1 日以来的天数,小数部分作为一天的一部分。

    declare @d1 datetime
    
    set @d1 = 41867
    
    select @d1
    
    select CONVERT(varchar(20),@d1,120)
    

    或者如果你想在一个语句中做到这一点:

    select CONVERT(varchar(25),cast(41867 as datetime),120)
    

    【讨论】:

    • 在我的机器上打印:2014-04-18 00:00:00 你在运行 SQL Server,如果是,是什么版本?
    • 请在以后指定。你浪费了很多志愿者的时间。 Access 和 Sql Server 是非常不同的产品。
    猜你喜欢
    • 2021-06-13
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    相关资源
    最近更新 更多