【问题标题】:SQL How to convert number (integer) to date? [closed]SQL如何将数字(整数)转换为日期? [关闭]
【发布时间】:2012-08-24 03:29:56
【问题描述】:

我正在使用小型商业软件并导入到 SQL Server。但是有数字:

75739
76910
73105
75821
75245
75605
77169
73265
75611
74073
77012

代表我认为的日期。

如何将这些数字转换为日期YYYY-MM-DDYYYYMMDD

【问题讨论】:

  • 这些应该代表什么日期?
  • 如果这些数字和日期之间没有某种映射关系,我们将无能为力 - 询问您获取文件的人。
  • 这些日期不是转换为 int 的 SQL Server 日期。例如 cast(75739 as datetime) -> May, 15 2107。那么 75739 是什么日期?
  • 可能从一个未知的日期时间滴答作响
  • 如果我不得不猜测,这些是自 1800 年 1 月 1 日以来的天数。 @Justin,如果您知道这种格式的具体日期是什么,那么您可以轻松获得转换的基准日期。

标签: sql sql-server tsql sql-server-2008-r2


【解决方案1】:

基于 1900 年 1 月 1 日的 SQL Server 纪元(基准或零日期),这些日期为 22 世纪

SELECT DATEADD(day, 75739, 0) -- 2107-05-15 00:00:00.000

还是基于日期时间的下限?这是 1960-ish,适用于出生日期

SELECT DATEADD(day, 75739, '17530101') -- 1960-05-15 00:00:00.000

tl;博士需要更多信息。否则不要尝试

【讨论】:

    【解决方案2】:

    通常,当日期表示为数字时,它们表示自给定日期以来的天数。在某些情况下,您可能有一个像 20120829 这样的数字,它实际上可以解析为 YYYYMMDD。但这些日期似乎不是那种形式。另一种格式可能是 YYday-of-year,因此 100001 将是 2010 年 1 月 1 日。但是,这些日期也不会以这种格式显示。

    假设这些是自给定日期以来的天数,那么在 SQL Server 中您将使用:

    select dateadd(day, <val>, <basedate>)
    

    对于 Excel,你会使用类似的东西:

    select dateadd(day, <val>, '1899-12-31')
    

    但是,这将这些日期置于 22 世纪。

    您需要详细了解这些日期的格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 2023-02-06
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多