-1

我正在查询具有此列的 SQL Server 表:

dateCreated(numeric(19, 0), null)

看来这是 UNIX 纪元时间。我想从表中选择所有内容并将dateCreated列转换为适合报告提取的内容。我通过我发现的其他一些帖子尝试了以下内容:

如何将 Epoch 时间转换为日期?

SELECT 
    DATEADD(S, t.dateCreated, CAST('1970-01-01' as datetime)), 
    t.user, t.machine  
FROM
    table t

任何变体都会产生错误

将表达式转换为数据类型 int 的算术溢出错误

如何将此列转换为datetime格式?

4

1 回答 1

1

发生这种情况是因为 t 中至少有一行t.dateCreated大于 2147483647。

2147483647 是 SQL Server 中 int 数据类型的最大值。

2147483647 是 EPOCH 时间的 2038-01-19 03:14:07。

如果t.dateCreated确实是 EPOCH 时间并且t.dateCreated其值高于 2038-01-19 03:14:07,则该查询将不起作用。

也许你应该检查:

  • 如果t.dateCreated真的是EPOCH时代。
  • > 2147483647的行,t.dateCreated以防出现一些异常值。

要检查的另一件事是,EPOCH 时间是否以毫秒表示。

在这种情况下,查询应该是

SELECT 
DATEADD(S, t.dateCreated / 1000, CAST('1970-01-01' as datetime)), 
    t.user, t.machine   
FROM
    table t

但是你会错过几毫秒。

于 2021-01-22T05:30:39.697 回答