【问题标题】:SQL Server date conversion is 68 years behind the actual dateSQL Server 日期转换比实际日期晚 68 年
【发布时间】:2016-09-28 05:41:16
【问题描述】:

我想将integer 转换为date 格式。我正在使用以下脚本:

SELECT CAST(7549 as datetime)

它返回一个日期1920-09-02

但是,7549 实际日期是 1988-08-31

谁能帮助我如何执行正确的映射?

【问题讨论】:

  • 最佳方法取决于您的 DBMS;请更新您问题的标签以表明这是 PostgreSQL、Oracle、MySQL、SQLServer、. . .
  • 从 WHERE 你发现 7549 的实际日期是 1988-08-31 ?!?
  • 7549 实际上是 1920-09-02。你怎么能说 7549 实际上是 1988-08-31?
  • SELECT DATEADD(d, 24835, CAST(7549 AS datetime)) 呢?
  • 0 IN SQL Server 是 1900-01-01。与您之前使用的任何 SQL 版本相反,它似乎是 1967-12-31。尝试DATEADD(DAY, 7549, '1967-12-31') 或在那里替换任何 INT。编辑:仅供参考,将 INT 转换为日期时间会将天数添加到 0,即 SQL Server 中的 1900-01-01

标签: sql sql-server date


【解决方案1】:

看反面

DECLARE @YourDate AS Datetime

SET @YourDate = '1920-09-02'
SELECT CAST(@YourDate AS INT) --7549

SET @YourDate = '1988-08-31'
SELECT CAST(@YourDate AS INT) -- 32384

【讨论】:

  • 不幸的是。它对我来说不是正确的解决方案。我不确定 CAST 是否适合我的任务
  • 我没有给你解决方案:)
【解决方案2】:

如果您希望结果为“1988-08-31 00:00:00.000”,请尝试使用以下脚本。

SELECT CAST(7549 as datetime)-CAST('1832-01-03' as datetime)

SELECT CAST(7549 as datetime)+CAST(24835 as datetime)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多